Files
sql-server-samples/samples/features/json/Dapper-Orm/sql-scripts/setup.sql
T

119 lines
5.0 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
USE master
GO
DROP DATABASE IF EXISTS ProductCatalog
GO
CREATE DATABASE ProductCatalog
GO
USE ProductCatalog
GO
DROP TABLE IF EXISTS Product
GO
CREATE TABLE Product (
ProductID int IDENTITY PRIMARY KEY,
Name nvarchar(50) NOT NULL,
Color nvarchar(15) NULL,
Size nvarchar(5) NULL,
Price money NOT NULL,
Quantity int NULL,
Data nvarchar(4000),
Tags nvarchar(4000)
)
GO
SET IDENTITY_INSERT Product ON
GO
DECLARE @products NVARCHAR(MAX) =
N'[{"ProductID":15,"Name":"Adjustable Race","Color":"Magenta","Size":"62","Price":100.0000,"Quantity":75,"Data":{"Type":"Part","MadeIn":"China"}},{"ProductID":16,"Name":"Bearing Ball","Color":"Magenta","Size":"62","Price":15.9900,"Quantity":90,"Data":{"ManufacturingCost":11.672700,"Type":"Part","MadeIn":"China"},"Tags":["promo"]},{"ProductID":17,"Name":"BB Ball Bearing","Color":"Magenta","Size":"62","Price":28.9900,"Quantity":80,"Data":{"ManufacturingCost":21.162700,"Type":"Part","MadeIn":"China"}},{"ProductID":18,"Name":"Blade","Color":"Magenta","Size":"62","Price":18.0000,"Quantity":45,"Data":{},"Tags":["new"]},{"ProductID":19,"Name":"Sport-100 Helmet, Red","Color":"Red","Size":"72","Price":41.9900,"Quantity":38,"Data":{"ManufacturingCost":30.652700,"Type":"Еquipment","MadeIn":"China"},"Tags":["promo"]},{"ProductID":20,"Name":"Sport-100 Helmet, Black","Color":"Black","Size":"72","Price":31.4900,"Quantity":60,"Data":{"ManufacturingCost":22.987700,"Type":"Еquipment","MadeIn":"China"},"Tags":["new","promo"]},{"ProductID":21,"Name":"Mountain Bike Socks, M","Color":"White","Size":"M","Price":560.9900,"Quantity":30,"Data":{"Type":"Clothes"},"Tags":["sales","promo"]},{"ProductID":22,"Name":"Mountain Bike Socks, L","Color":"White","Size":"L","Price":120.9900,"Quantity":20,"Data":{"ManufacturingCost":88.322700,"Type":"Clothes"},"Tags":["sales","promo"]},{"ProductID":23,"Name":"Long-Sleeve Logo Jersey, XL","Color":"Multi","Size":"XL","Price":44.9900,"Quantity":60,"Data":{"ManufacturingCost":32.842700,"Type":"Clothes"},"Tags":["sales","promo"]},{"ProductID":24,"Name":"Road-650 Black, 52","Color":"Black","Size":"52","Price":704.6900,"Quantity":70,"Data":{"Type":"Bike","MadeIn":"UK"}},{"ProductID":25,"Name":"Mountain-100 Silver, 38","Color":"Silver","Size":"38","Price":359.9900,"Quantity":45,"Data":{"ManufacturingCost":262.792700,"Type":"Bike","MadeIn":"UK"},"Tags":["promo"]},{"ProductID":26,"Name":"Road-250 Black, 48","Color":"Black","Size":"48","Price":299.0200,"Quantity":25,"Data":{"ManufacturingCost":218.284600,"Type":"Bike","MadeIn":"UK"},"Tags":["new","promo"]},{"ProductID":27,"Name":"ML Bottom Bracket","Price":101.2400,"Quantity":50,"Data":{"Type":"Part","MadeIn":"China"}},{"ProductID":28,"Name":"HL Bottom Bracket","Price":121.4900,"Quantity":65,"Data":{"ManufacturingCost":88.687700,"Type":"Part","MadeIn":"China"}}]'
INSERT INTO Product (ProductID, Name, Color, Size, Price, Quantity, Data, Tags)
SELECT ProductID, Name, Color, Size, Price, Quantity, Data, Tags
FROM OPENJSON (@products) WITH(
ProductID int,
Name nvarchar(50),
Color nvarchar(15),
Size nvarchar(5),
Price money,
Quantity int,
Data nvarchar(MAX) AS JSON,
Tags nvarchar(MAX) AS JSON
)
GO
SET IDENTITY_INSERT Product OFF
GO
CREATE PROCEDURE dbo.InsertProductFromJson(@ProductJson NVARCHAR(MAX))
AS BEGIN
INSERT INTO dbo.Product(Name,Color,Size,Price,Quantity,Data,Tags)
OUTPUT INSERTED.ProductID
SELECT Name,Color,Size,Price,Quantity,Data,Tags
FROM OPENJSON(@ProductJson)
WITH ( Name nvarchar(100) N'strict $."Name"',
Color nvarchar(30),
Size nvarchar(10),
Price money N'strict $."Price"',
Quantity int,
Data nvarchar(max) AS JSON,
Tags nvarchar(max) AS JSON) as json
END
GO
CREATE PROCEDURE dbo.UpdateProductFromJson(@ProductID int, @ProductJson NVARCHAR(MAX))
AS BEGIN
UPDATE dbo.Product SET
Name = json.Name,
Color = json.Color,
Size = json.Size,
Price = json.Price,
Quantity = json.Quantity,
Data = ISNULL(json.Data, dbo.Product.Data),
Tags = ISNULL(json.Tags,dbo.Product.Tags)
FROM OPENJSON(@ProductJson)
WITH ( Name nvarchar(100) N'strict $."Name"',
Color nvarchar(30),
Size nvarchar(10),
Price money N'strict $."Price"',
Quantity int,
Data nvarchar(max) AS JSON,
Tags nvarchar(max) AS JSON) as json
WHERE dbo.Product.ProductID = @ProductID
END
GO
CREATE PROCEDURE dbo.UpsertProductFromJson(@ProductID int, @ProductJson NVARCHAR(MAX))
AS BEGIN
MERGE INTO dbo.Product
USING ( SELECT Name,Color,Size,Price,Quantity,Data,Tags
FROM OPENJSON(@ProductJson)
WITH (
Name nvarchar(100) N'strict $."Name"',
Color nvarchar(30),
Size nvarchar(10),
Price money N'strict $."Price"',
Quantity int,
Data nvarchar(max) AS JSON,
Tags nvarchar(max) AS JSON)) as json
ON (dbo.Product.ProductID = @ProductID)
WHEN MATCHED THEN
UPDATE SET
Name = json.Name,
Color = json.Color,
Size = json.Size,
Price = json.Price,
Quantity = json.Quantity,
Data = json.Data,
Tags = json.Tags
WHEN NOT MATCHED THEN
INSERT (Name,Color,Size,Price,Quantity,Data,Tags)
VALUES (json.Name,json.Color,json.Size,json.Price,json.Quantity,json.Data,json.Tags);
END
GO