我想在SQL Server中创建一个存储过程,它可以接受JSON数据,并将其上传到一个指定的表中的相关列中。例如,取这个JSON字符串。
[{"ID":5,"LastName":"Donalds","FirstName":"Dave","Age":23,"City":"London"}]
上面的这个字符串可以通过下面的查询来生成
SELECT
5 as 'ID',
'Donalds' as 'LastName',
'Dave' as 'FirstName',
23 as 'Age',
'London' as 'City'
FOR JSON PATH
我设法写了一个脚本,可以上传到我的表 "Person "中。我的表有以下的CREATE脚本。
CREATE TABLE [dbo].[Persons](
[ID] [int] NOT NULL,
[LastName] [varchar](255) NOT NULL,
[FirstName] [varchar](255) NULL,
[Age] [int] NULL,
[City] [varchar](255) NULL
) ON [PRIMARY]
GO
我已经成功地写了一个脚本,可以将上述JSON上传到我的表中,但是我想在存储过程中进一步自动化它。上传上述JSON的脚本是。
DECLARE @jsonVariable varchar(max);
Set @jsonVariable = N'[{"ID":5,"LastName":"Donalds","FirstName":"Dave","Age":23,"City":"London"}]';
INSERT INTO Persons Select *
FROM OPENJSON (@jsonVariable, N'$')
WITH (
ID INT N'$.ID',
LastName VARCHAR(50) N'$.LastName',
FirstName VARCHAR(50) N'$.FirstName',
Age INT N'$.Age',
City VARCHAR(50) N'$.City'
)
所以我的目标是创建一个存储过程 它的执行函数是这样的:
EXEC InsertPersonsJSON
'[{"ID":5,"LastName":"Donalds","FirstName":"Dave","Age":23,"City":"London"}]'
然而,我不知道如何在创建存储过程的步骤中分离变量 为JSON数据。
我想要的结果是我的表中的最后一行。
ID LastName FirstName Age City
5 Donalds Dave 23 London
谢谢你的帮助,如果我的问题需要进一步澄清,请告诉我!:)
如果我理解正确,你想 ... 在SQL Server中创建一个存储过程,可以接受JSON数据,并将其上传到一个指定的表中的相关列中。,你真的很接近了。你需要创建这个存储过程并包含你的SQL语句。
存储过程:
CREATE PROCEDURE InsertPersonsJSON (
@JsonData NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @err int
INSERT INTO Persons (ID, LastName, FirstName, Age, City)
SELECT ID, LastName, FirstName, Age, City
FROM OPENJSON (@JsonData, N'$') WITH (
ID INT N'$.ID',
LastName VARCHAR(50) N'$.LastName',
FirstName VARCHAR(50) N'$.FirstName',
Age INT N'$.Age',
City VARCHAR(50) N'$.City'
)
SELECT @err = @@ERROR
RETURN (@err)
END
执行:
DECLARE @RC int
DECLARE @JsonData nvarchar(max)
SET @JsonData = N'[{"ID":5,"LastName":"Donalds","FirstName":"Dave","Age":23,"City":"London"}]'
EXECUTE @RC = InsertPersonsJSON @JsonData
IF @RC = 0 PRINT 'OK'
ELSE PRINT 'Error'