如何运行包含变量的选定SQL查询?

时间:2017-07-25 01:44:57

标签: sql sql-server ssms

我希望能够通过选择它并按F5来运行我的SQL查询片段。问题是,如果该选择包含变量名称,则会收到错误:Must declare the scalar variable "@variableName".。无论如何要解决这个问题?我希望variableName成为我在我选择的那个时刻运行整个陈述时的价值......

完整代码示例:

DECLARE @cat INT;

SET @cat = 2;

SELECT * FROM TableName
WHERE ColumnName = @cat;

我希望在不包含声明/设置行的情况下运行我的选择示例:

SELECT * FROM TableName
WHERE ColumnName = @cat;

可能不可能,但我认为值得一试。

P.S。我是一个SQL noobie所以,如果我遗漏了一些明显的东西,请告诉我!

3 个答案:

答案 0 :(得分:1)

我知道你来自哪里。这是一个很长的程序或其他东西的片段,你自然希望将声明保持在最顶层,我同意这一点。在这种情况下,当您进行测试时,唯一真正避免这种情况的方法是重新声明它并将其设置在代码段的顶部。然后,当您运行整批代码时,只需注释掉这一行。否则,您必须将片段包装在try / catch块中以尝试捕获编译错误,这很棘手。

此外,这通常是我看到人们从someWorkTable中选择*来测试结果的方式。然后在批处理运行时注释掉它。

答案 1 :(得分:0)

左键单击表名,右键单击设计,您可以查看列名的数据类型。 如果它是nvarchar ..

DECLARE @cat INT;
SET @cat = 2;
Convert(varchar, @cat)

SELECT * FROM TableName
WHERE ColumnName = @cat;

OR

直接声明

DECLARE @Cat VARCHAR(3)
SET @cat = '2'
SELECT * FROM TableName
WHERE ColumnName = @cat;

希望这有帮助

答案 2 :(得分:0)

您可以使用别名结果模拟在选择查询中声明的变量。然后你可以使用alias.column作为你加入的一部分......

SELECT 
      TN.* 
   FROM 
      ( select '2' as TmpColumn ) tmpAlias
         JOIN TableName TN
            on tmpAlias.TmpColumn = TN.ColumnName
这样,没有"标量"变量是必需的,但不如使用直接WHERE子句的简单参数化查询那样实用。此外,您可以使用alias.column,以防您有其他表关系等,甚至可以使用额外的"变量"你想在你的查询中申请。