[英]Error Must declare scalar variable in sql server
我目前正在使用 JSON 和 SQL,我正在尝试编写动态 sql 命令,但 sql server 总是说“必须声明标量变量“@AgencesP” ”,我不知道我做错了什么,因为如果我尝试SELECT * FROM @AgencesP
我有我的数据。
DECLARE @AgencesP TABLE (Agence INT, Groupe INT)
DECLARE @P VARCHAR(MAX)
DECLARE @SQLC VARCHAR(MAX)
SET @P = N'{ "Agences":[ 1, 6 ],"Groupes":[ 40, 45 ] }' --Agences
INSERT INTO @AgencesP (Agence, Groupe)
SELECT *
FROM OpenJSON(@P,'$.Agences')
WITH(Agence INT '$')
LEFT JOIN OpenJSON(@P,'$.Groupes')
WITH(Groupe INT '$') ON 1=1
SET @SQLC = 'SELECT TOP 20 * '+
'FROM GRH_T_Salarie '+
'INNER JOIN @AgencesP ON GRH_T_Salarie.IdAgenceExploitation ='+@AgencesP.Agence
您可以简化语句:
DECLARE @P VARCHAR(MAX)
SET @P = N'{ "Agences":[ 1, 6 ],"Groupes":[ 40, 45 ] }' --Agences
SELECT TOP 20 *
FROM GRH_T_Salarie
INNER JOIN (
SELECT Agence, Groupe
FROM OPENJSON(@P,'$.Agences') WITH (Agence INT '$')
OUTER APPLY OPENJSON(@P,'$.Groupes') WITH (Groupe INT '$')
) agnt ON GRH_T_Salarie.IdAgenceExploitation = agnt.Agence
当然,如果你是...尝试写一个动态的sql命令... (虽然你不需要动态语句),传递一个表作为参数需要一个表类型声明:
CREATE TYPE AgencesPType AS TABLE (Agence INT, Groupe INT)
DECLARE @AgencesP AgencesPType
DECLARE @P VARCHAR(MAX)
DECLARE @SQLC NVARCHAR(MAX)
SET @P = N'{ "Agences":[ 1, 6 ],"Groupes":[ 40, 45 ] }' --Agences
INSERT INTO @AgencesP (Agence, Groupe)
SELECT *
FROM OpenJSON(@P,'$.Agences')
WITH(Agence INT '$')
LEFT JOIN OpenJSON(@P,'$.Groupes')
WITH(Groupe INT '$') ON 1=1
SET @SQLC =
N'SELECT TOP 20 * '+
N'FROM GRH_T_Salarie g '+
N'INNER JOIN @AgencesP a ON g.IdAgenceExploitation = a.Agence'
EXEC sp_executesql @SQLC, N'@AgencesP AgencesPType READONLY', @AgencesP
尝试使用别名,例如:
SET @SQLC = 'SELECT TOP 20 * '+
'FROM GRH_T_Salarie '+
'INNER JOIN @AgencesP agnt ON GRH_T_Salarie.IdAgenceExploitation =agnt.Agence'
编辑:我通过删除动态 SQL 命令使它工作:) 如果有人需要它的代码:
DECLARE @AgencesP TABLE (Agence INT, Groupe INT)
DECLARE @P VARCHAR(MAX)
DECLARE @SQLC VARCHAR(255)
SET @P = N'{ "Agences":[ 1, 6 ],"Groupes":[ 40, 45 ] }' --Agences
INSERT INTO @AgencesP (Agence, Groupe)
SELECT *
FROM OpenJSON(@P,'$.Agences')
WITH(Agence INT '$')
INNER JOIN OpenJSON(@P,'$.Groupes')
WITH(Groupe INT '$') ON 1=1
SELECT TOP 20 *
FROM GRH_T_Salarie
INNER JOIN @AgencesP agnt ON GRH_T_Salarie.IdAgenceExploitation = agnt.Agence
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.