Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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查询?_Sql_Sql Server_Ssms - Fatal编程技术网

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

如何运行包含变量的选定SQL查询?,sql,sql-server,ssms,Sql,Sql Server,Ssms,我希望能够通过选择SQL查询片段并按F5来运行它。问题是,如果该选择包含变量名,我会得到一个错误:必须声明标量变量“@variableName”。。有没有办法解决这个问题?我希望variableName成为如果我在我选择的那一刻运行整个语句,否则它将是一个值 完整代码示例: DECLARE @cat INT; SET @cat = 2; SELECT * FROM TableName WHERE ColumnName = @cat; 我希望在不包含声明/设置行的情况下运行的所选内容的示例:

我希望能够通过选择SQL查询片段并按
F5
来运行它。问题是,如果该选择包含变量名,我会得到一个错误:
必须声明标量变量“@variableName”。
。有没有办法解决这个问题?我希望
variableName
成为如果我在我选择的那一刻运行整个语句,否则它将是一个值

完整代码示例:

DECLARE @cat INT;

SET @cat = 2;

SELECT * FROM TableName
WHERE ColumnName = @cat;
我希望在不包含声明/设置行的情况下运行的所选内容的示例:

SELECT * FROM TableName
WHERE ColumnName = @cat;
也许不可能,但我觉得值得一试


另外,我是SQL noobie,所以如果我遗漏了一些明显的东西,请告诉我

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


另外,我经常看到人们在测试结果的过程中,从某个工作表中选择*来测试结果。然后在批处理运行时将其注释掉

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

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

SELECT * FROM TableName
WHERE ColumnName = @cat;

直接申报

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

希望这有帮助

您可以使用别名结果模拟select查询中声明的变量。然后您可以将alias.column用作联接的一部分

SELECT 
      TN.* 
   FROM 
      ( select '2' as TmpColumn ) tmpAlias
         JOIN TableName TN
            on tmpAlias.TmpColumn = TN.ColumnName

这样,就不需要“标量”变量,但不如使用直接WHERE子句的简单参数化查询那么实用。此外,如果您有其他表、关系等,甚至您想在查询中应用的其他“变量”,您可以始终使用alias.column。

Post the query。。当在查询中使用变量时,则
declare
语句应该是执行的一部分,否则您将得到该错误…@Pரதீப் 出于保密的原因,对不起,我不能。我可以替换名字和其他东西,但代码很长,这将花费很长时间。。嗯,我可以尝试一个示例1秒钟。只需包含在实际查询之前定义/初始化变量的代码。然后把所有的东西放在一起。@ TimieGeeleISEN,代码在页面的顶部,而我的片段在中间。因此,如果不在中间添加不需要的内容,我就无法同时突出显示所有这些内容。我不确定我是否有一个聪明的解决办法。