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"

如果SQL Server中不存在JSON,我可以创建表、分解JSON并添加数据:

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行附近语法不正确。将添加错误发生的图像感谢一百万,特别是对于解释。