必须声明已经声明的标量变量“”

时间:2019-09-13 21:10:28

标签: sql sql-server sql-server-2012

我已经创建了一个表变量,并且试图在我的查询字符串变量中引用该变量。错误是告诉我在我已经声明它时声明该变量。有人可以帮我看看我要去哪里了吗?

错误:

  

[42000] [Microsoft] [SQL Server本机客户端11.0] [SQL Server]
  必须声明标量变量“ @ Temp2”

2 个答案:

答案 0 :(得分:0)

问题出在+ @Temp2 +

SET @Query = 'SELECT 
cq.Id,
(SELECT COUNT(*) AS CountRow FROM (' + (SELECT Query FROM tblCustomQuery WHERE Id = 154) + ') y) AS X FROM tblCustomQuery cq WHERE Id = IN (SELECT QueryId FROM ' + @Temp2 +  'WHERE Row_Num = 1)'

更改此位以使@Temp2内联:

SET @Query = 'SELECT 
cq.Id,
(SELECT COUNT(*) AS CountRow FROM (' + (SELECT Query FROM tblCustomQuery WHERE Id = 154) + ') y) AS X FROM tblCustomQuery cq WHERE Id = IN (SELECT QueryId FROM @Temp2 WHERE Row_Num = 1)'

答案 1 :(得分:0)

此重复的link是您的答案。

MSDN质量检查link

您不能在table variable中使用dynamic SQL。表变量与动态SQL的范围隔离。您只能使用临时表和普通表。

以下两种解决方法。
1.您需要创建temporary table并能够在dynamic SQL中使用。
2.您需要创建table type并在dynamic SQL中使用。