mirror of
https://github.com/Microsoft/sql-server-samples.git
synced 2025-12-08 14:58:54 +00:00
@@ -1,8 +1,23 @@
|
||||
<#@ output extension=".sql" #>
|
||||
<#@ template language="C#" hostspecific="True" #>
|
||||
|
||||
|
||||
SELECT *
|
||||
FROM OPENROWSET(BULK '<#=this.Host.ResolvePath("..\\logs") #>\log-20170203.ndjson',
|
||||
FORMATFILE = '<#=this.Host.ResolvePath("..\\logs") #>\linedelimited.fmt' );
|
||||
FORMATFILE = '<#=this.Host.ResolvePath("..\\logs") #>\linedelimited.fmt' ) as logs;
|
||||
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS Logs
|
||||
|
||||
--{"Timestamp":"2017-02-03T08:33:32.0776155+01:00","Level":"Information","MessageTemplate":"{HostingRequestFinished:l}","Properties":{"ElapsedMilliseconds":154.2332,"StatusCode":200,"ContentType":null,"HostingRequestFinished":"Request finished in 154.2332ms 200 ","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Internal.WebHost","RequestId":"0HL2C0RQ64LNN","RequestPath":"/"},"Renderings":{"HostingRequestFinished":[{"Format":"l","Rendering":"Request finished in 154.2332ms 200 "}]}}
|
||||
CREATE TABLE Logs (
|
||||
Data NVARCHAR(MAX),
|
||||
Timestamp AS CAST(JSON_VALUE(Data, '$.Timestamp') as datetime2),
|
||||
Level AS CAST(JSON_VALUE(Data, '$.Level') as nvarchar(40)),
|
||||
ElapsedMilliseconds AS CAST(JSON_VALUE(Data, '$.Properties.ElapsedMilliseconds') AS float),
|
||||
StatusCode AS CAST(JSON_VALUE(Data, '$.Properties.StatusCode') AS int)
|
||||
)
|
||||
|
||||
BULK INSERT Logs
|
||||
FROM '<#=this.Host.ResolvePath("..\\logs") #>\log-20170203.ndjson'
|
||||
WITH (FORMATFILE = '<#=this.Host.ResolvePath("..\\logs") #>\linedelimited.fmt')
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
using Belgrade.SqlClient;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlServerRestApi;
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
|
||||
namespace Register.Controllers
|
||||
{
|
||||
[Route("api/[controller]")]
|
||||
public class ODataController : Controller
|
||||
{
|
||||
IQueryPipe pipe = null;
|
||||
TableSpec tableSpec = new TableSpec("dbo", "People")
|
||||
.AddColumn("id", "int", isKeyColumn: true)
|
||||
.AddColumn("name","nvarchar")
|
||||
.AddColumn("surname","nvarchar")
|
||||
.AddColumn("address", "nvarchar")
|
||||
.AddColumn("town", "nvarchar");
|
||||
|
||||
public string ODataMetadataUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Request.Scheme + "://" + this.Request.Host + "/api/odata";
|
||||
}
|
||||
}
|
||||
|
||||
public ODataController(IQueryPipe sqlQueryService)
|
||||
{
|
||||
this.pipe = sqlQueryService;
|
||||
}
|
||||
|
||||
[Produces("application/json; odata.metadata=minimal")]
|
||||
[HttpGet]
|
||||
public string Get()
|
||||
{
|
||||
return ODataHandler.GetRootMetadataJsonV4(ODataMetadataUrl, new TableSpec[] { tableSpec });
|
||||
}
|
||||
|
||||
|
||||
[Produces("application/xml")]
|
||||
[HttpGet("$metadata")]
|
||||
public string Metadata()
|
||||
{
|
||||
return ODataHandler.GetMetadataXmlV4(new TableSpec[] { tableSpec }, "Demo.Models");
|
||||
}
|
||||
|
||||
// GET api/odata/People
|
||||
[HttpGet("People")]
|
||||
public async Task People()
|
||||
{
|
||||
await this
|
||||
.ODataHandler(tableSpec, this.pipe, ODataHandler.Metadata.MINIMAL)
|
||||
.OnError(ex => Response.Body.Write(Encoding.UTF8.GetBytes(ex.Message), 0, (ex.Message).Length))
|
||||
.Get();
|
||||
}
|
||||
|
||||
// GET api/odata/People/$count
|
||||
[HttpGet("People/$count")]
|
||||
public Task PeopleCount()
|
||||
{
|
||||
return this.People();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ namespace Register.Controllers
|
||||
public class PeopleController : Controller
|
||||
{
|
||||
IQueryPipe pipe = null;
|
||||
TableSpec tableSpec = new TableSpec("dbo.People", "name,surname,address,town");
|
||||
TableSpec tableSpec = new TableSpec("dbo", "People", "name,surname,address,town");
|
||||
|
||||
public PeopleController(IQueryPipe sqlQueryService)
|
||||
{
|
||||
@@ -36,6 +36,7 @@ namespace Register.Controllers
|
||||
[HttpGet("odata")]
|
||||
public async Task OData()
|
||||
{
|
||||
Response.ContentType = "application/json";
|
||||
await this
|
||||
.ODataHandler(tableSpec, pipe)
|
||||
.Process();
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<Query Kind="Expression">
|
||||
<Connection>
|
||||
<ID>0a98b0bc-4850-40e5-9b82-0a5339b19c5f</ID>
|
||||
<Persist>true</Persist>
|
||||
<Driver Assembly="OData4DynamicDriver" PublicKeyToken="ac4f2d9e4b31c376">OData4.OData4DynamicDriver</Driver>
|
||||
<Server>http://localhost:59934/api/odata</Server>
|
||||
</Connection>
|
||||
</Query>
|
||||
|
||||
People
|
||||
.Where(p=>p.id<50 && p.id>5)
|
||||
.OrderBy(p=>p.town)
|
||||
.Select(p=>new {p.id,p.name,p.town})
|
||||
@@ -16,7 +16,7 @@
|
||||
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
||||
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
||||
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
|
||||
"Sql-Server-Rest-Api": "0.2.7"
|
||||
"Sql-Server-Rest-Api": "0.3"
|
||||
},
|
||||
|
||||
"tools": {
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
CREATE TABLE dbo.People(
|
||||
DROP TABLE IF EXISTS dbo.People
|
||||
GO
|
||||
CREATE TABLE dbo.People(
|
||||
id int primary key identity,
|
||||
name nvarchar(50),
|
||||
surname nvarchar(50),
|
||||
@@ -10,10 +12,11 @@ GO
|
||||
alter database current set compatibility_level = 130;
|
||||
go
|
||||
|
||||
--select name, surname, address, town from dbo.People for json path
|
||||
declare @people nvarchar(max) =
|
||||
N'[{"name":"渡邉󠄐","surname":"俊","address":"神奈川県藤沢市辻堂1-1-41","town":"辻堂"},{"name":"渡邉󠄑","surname":"龍󠄄之介","address":"神奈川県藤沢市辻󠄀堂1-503","town":"辻󠄀堂"},{"name":"渡邉󠄒","surname":"博美","address":"兵庫県芦屋市精道町7番6号","town":"芦屋"},{"name":"田辺","surname":"浩一","address":"東京都港区港南2-16-3","town":"港南"},{"name":"田辺󠄁","surname":"洋子","address":"鹿児島県薩摩川内市神田町3番22号","town":"薩摩"},{"name":"田辺󠄂","surname":"大輔","address":"愛知県名古屋市熱田区川並町2-1","town":"川並"},{"name":"斎藤","surname":"由紀","address":"滋賀県東近江市五個荘川並󠄂町1-1","town":"川並󠄂"},{"name":"齋󠄂藤","surname":"俊󠄁","address":"東京都葛󠄀飾区小岩1-1-1","town":"葛󠄀飾"},{"name":"齋󠄃藤","surname":"龍一","address":"岡山県備前市東片上126番地 ","town":"芦󠄆別市"},{"name":"龍地","surname":"花子","address":"茨城県水戸市備󠄁前町816-2","town":"芦󠄂別市"},{"name":"龍󠄃地","surname":"次郎","address":"奈良県天理市備󠄂前町2-2-2","town":"芦別市"},{"name":"伴","surname":"龍󠄅二","address":"兵庫県芦󠄀屋市精道町7番6号","town":"芦󠄂屋"}]';
|
||||
N'[{"name":"俊","surname":"渡邉󠄐","address":"神奈川県藤沢市辻堂1-1-41","town":"辻堂"},{"name":"龍󠄄之介","surname":"渡邉󠄑","address":"神奈川県藤沢市辻󠄀堂1-503","town":"辻󠄀堂"},{"name":"博美","surname":"渡邉󠄒","address":"兵庫県芦屋市精道町7番6号","town":"芦屋"},{"name":"浩一","surname":"田辺","address":"東京都港区港南2-16-3","town":"港南"},{"name":"洋子","surname":"田辺󠄁","address":"鹿児島県薩摩川内市神田町3番22号","town":"薩摩"},{"name":"大輔","surname":"田辺󠄂","address":"愛知県名古屋市熱田区川並町2-1","town":"川並"},{"name":"由紀","surname":"斎藤","address":"滋賀県東近江市五個荘川並󠄂町1-1","town":"川並󠄂"},{"name":"俊󠄁","surname":"齋󠄂藤","address":"東京都葛󠄀飾区小岩1-1-1","town":"葛󠄀飾"},{"name":"龍一","surname":"齋󠄃藤","address":"岡山県備前市東片上126番地 ","town":"芦󠄆別市"},{"name":"花子","surname":"龍地","address":"茨城県水戸市備󠄁前町816-2","town":"芦󠄂別市"},{"name":"次郎","surname":"龍󠄃地","address":"奈良県天理市備󠄂前町2-2-2","town":"芦別市"},{"name":"龍󠄅二","surname":"伴","address":"兵庫県芦󠄀屋市精道町7番6号","town":"芦󠄂屋"}]';
|
||||
|
||||
insert into people (name, surname, address, town)
|
||||
select rtrim(name), surname, address, town
|
||||
select name, surname, address, town
|
||||
from openjson(@people)
|
||||
with (name nvarchar(50),surname nvarchar(50),address nvarchar(200),town nvarchar(50))
|
||||
Reference in New Issue
Block a user