Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在OPENJSON查询中使用动态表_名称?_Sql_Json_Sql Server - Fatal编程技术网

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外部定义变量,则它不知道该变量是什么。