Sql 如何在OPENJSON查询中使用动态表_名称?
我有一个类似这样的问题:Sql 如何在OPENJSON查询中使用动态表_名称?,sql,json,sql-server,Sql,Json,Sql Server,我有一个类似这样的问题: DECLARE @jsonVariable NVARCHAR(MAX) SET @jsonVariable = N'{ "id" : "11","info": { "fname": "John", "surname": "Smith" }, "age": "25" }' INSERT INTO Employees SELECT * FROM OPENJSON(@jsonVariable) WITH (id int,fname nvarchar(50
DECLARE @jsonVariable NVARCHAR(MAX)
SET @jsonVariable =
N'{ "id" : "11","info": { "fname": "John", "surname": "Smith" }, "age": "25" }'
INSERT INTO Employees
SELECT *
FROM OPENJSON(@jsonVariable)
WITH (id int,fname nvarchar(50) '$.info.fname')
如何在插入instade of Employees后使用动态表名
我已尝试使用sp_executesql:
DECLARE @jsonVariable NVARCHAR(MAX)
DECLARE @TABLENAME NVARCHAR(MAX) = 'Students'
DECLARE @SQL NVARCHAR(100)
SET @jsonVariable = N'{ "id" : "11","info": { "fname": "John", "surname": "Smith" }, "age": 25 }'
SET @SQL = 'INSERT INTO '+ @TABLENAME +' SELECT * FROM
OPENJSON(@jsonVariable); WITH (id int ,age nvarchar(50))'
EXEC sp_executesql @SQL
但是得到错误:必须声明标量变量“@jsonVariable”。
有什么办法吗?请像这样使用。
CREATE TABLE Em
(
Id INT
,fName VARCHAR(10)
)
GO
DECLARE @jsonVariable NVARCHAR(MAX)
DECLARE @TableName VARCHAR(10) = 'Em'
SET @jsonVariable =
N'{ "id" : "11","info": { "fname": "John", "surname": "Smith" }, "age": 25 }'
DECLARE @SQL AS VARCHAR(MAX) = '
INSERT INTO ' + @TableName + '
SELECT *
FROM OPENJSON(' + '''' + @jsonVariable + '''' + ')
WITH (id int,fname nvarchar(50) ''$.info.fname'') '
EXEC(@SQL)
SELECT * FROM Em
输出
Id fName
----------- ----------
11 John
(1 rows affected)
请像这样使用。
CREATE TABLE Em
(
Id INT
,fName VARCHAR(10)
)
GO
DECLARE @jsonVariable NVARCHAR(MAX)
DECLARE @TableName VARCHAR(10) = 'Em'
SET @jsonVariable =
N'{ "id" : "11","info": { "fname": "John", "surname": "Smith" }, "age": 25 }'
DECLARE @SQL AS VARCHAR(MAX) = '
INSERT INTO ' + @TableName + '
SELECT *
FROM OPENJSON(' + '''' + @jsonVariable + '''' + ')
WITH (id int,fname nvarchar(50) ''$.info.fname'') '
EXEC(@SQL)
SELECT * FROM Em
输出
Id fName
----------- ----------
11 John
(1 rows affected)
你基本上明白了。将@jsonVariable更改为“++@jsonVariable+”以将变量传递到动态SQL字符串中。您正在executesql之外定义变量,因此它不知道它是什么。您基本上已经得到了它。将@jsonVariable更改为“++@jsonVariable+”以将变量传递到动态SQL字符串中。如果您在executesql外部定义变量,则它不知道该变量是什么。