Json 如果不存在,则创建表并插入行,否则只需插入即可
如果SQL Server中不存在JSON,我可以创建表、分解JSON并添加数据:Json 如果不存在,则创建表并插入行,否则只需插入即可,json,sql-server,tsql,sql-insert,insert-update,Json,Sql Server,Tsql,Sql Insert,Insert Update,如果SQL Server中不存在JSON,我可以创建表、分解JSON并添加数据: DECLARE @json nvarchar(max); SET @json = N'[{"IplayerName": "Pilipiliz", "Sname": "kikombe", "WeightLBs":"60.236"
DECLARE @json nvarchar(max);
SET @json = N'[{"IplayerName": "Pilipiliz",
"Sname": "kikombe",
"WeightLBs":"60.236"
}]'
IF NOT EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = object_id('Iplayerds'))
BEGIN
SELECT
[IplayerName],
[Sname],
[WeightLBs]
INTO
Iplayerds
FROM
OPENJSON(@json)
WITH (IplayerName NVARCHAR(200),
Sname NVARCHAR(20),
WeightLBs DECIMAL(10,4)
)
END
ELSE
PRINT 'exists'
但是,当我尝试用下面显示的insert rows代码替换print语句时,它失败了
INSERT INTO Iplayerds (IplayerName, Sname, WeightLBs)
VALUES ([IplayerName], [Sname], [WeightLBs]
FROM OPENJSON(@json))
我做错了什么?插入命令有两种风格:
1您可以将所有值作为文本或SQL Server变量提供—在这种情况下,您可以使用INSERT。。价值观方法:
INSERT INTO dbo.Iplayerds (IplayerName, Sname, WeightLBs)
VALUES (@IplayerName, @Sname, @WeightLBs)
INSERT INTO dbo.Iplayerds (IplayerName, Sname, WeightLBs)
SELECT
[IplayerName], [Sname], [WeightLBs]
FROM
OPENJSON(@json) WITH (IplayerName NVARCHAR(200),
Sname NVARCHAR(20),
WeightLBs DECIMAL(10,4)
)
注意:我建议您始终明确指定要插入数据的列的列表,这样,如果突然您的表有了一个额外的列,或者如果您的表有一个标识或计算列,您就不会有任何令人不快的意外。是的,只需再多做一次工作,但这样你就可以将INSERT语句尽可能地固定下来,而且如果你的表发生了变化,你就不必一直摆弄它了
2如果您没有将所有值都作为文本和/或变量,而是希望依赖另一个表、多个表或视图来提供值,那么您可以使用INSERT。。。选择方法:
INSERT INTO dbo.Iplayerds (IplayerName, Sname, WeightLBs)
VALUES (@IplayerName, @Sname, @WeightLBs)
INSERT INTO dbo.Iplayerds (IplayerName, Sname, WeightLBs)
SELECT
[IplayerName], [Sname], [WeightLBs]
FROM
OPENJSON(@json) WITH (IplayerName NVARCHAR(200),
Sname NVARCHAR(20),
WeightLBs DECIMAL(10,4)
)
在这里,您必须在SELECT中定义与INSERT所需数量相同的项,这些项可以是表或视图中的列,也可以是文字或变量。再次:明确提供要插入的列的列表-请参见上文
您可以使用其中一个-但不能将两者混合使用-您不能使用值。。。然后在你的值列表中间有一个选择查询-选择其中的一个-坚持它。< /P> @ Dale K Msg 156,15级,状态1,行38在关键字“select”附近不正确的语法。Msg 102,15级,状态1,第40行附近语法不正确。将添加错误发生的图像感谢一百万,特别是对于解释。