【问题标题】:How I use a local variable in a SQL fiddle query [duplicate]我如何在 SQL 小提琴查询中使用局部变量 [重复]
【发布时间】:2015-07-17 19:39:42
【问题描述】:

我试图创建一个sqlfiddle

DECLARE @binsize INT = 5;
select 5;
select @binsize; <-- this fail.
select 6;

得到了这个错误。

必须声明标量变量“@binsize”。

我找到了这样的示例,并且在 sql server 中可以正常工作。

USE AdventureWorks2012;
GO
DECLARE @find varchar(30); 
/* Also allowed: 
DECLARE @find varchar(30) = 'Man%'; 
*/
SET @find = 'Man%'; 
SELECT p.LastName, p.FirstName, ph.PhoneNumber
FROM Person.Person AS p 
JOIN Person.PersonPhone AS ph ON p.BusinessEntityID = ph.BusinessEntityID
WHERE LastName LIKE @find; 

解决

使用 GO 更改可以解决问题。但仍然打开其他问题。

DECLARE @binsize INT = 5;
select @binsize + 2 ;
select @binsize + 5 ;
GO

只返回 7

【问题讨论】:

  • 去掉分号。
  • 请注意,在支持方言中应尽可能使用分号,但是是的,在这种情况下,这是(有问题的)解决方案。不过,我不建议在 T-SQL 中忽略它们,因为 (A) 这只是很好的 ANSI,并且 (B) MS 有记录表明它们可能在未来的版本中成为强制性的。不太可能,但值得尽早开始......
  • 或在查询下方的第四个组合框中选择“go”作为查询终止符
  • 使用GO作为查询终止符比删除分号更好。
  • @AaronBertrand,你说得对,是重复的,但那里的解决方案不起作用。您可以检查所选解决方案的fiddle 甚至没有编译。

标签: sql-server sql-server-2014 sqlfiddle


【解决方案1】:

正如@AaronBertrand 建议的那样,使用GOa better practice,如下所示:

DECLARE @binsize INT = 5;
select @binsize;
GO

select 5;

注意:在 SQLFiddle 站点的右上角,您需要切换查询终止符以使用 GO 关键字。

SQL Fiddle Demo

【讨论】:

  • 虽然这在这种简单的情况下有效,但它是not exactly a best practice,并且当 OP 使用实际上需要分号的查询构造时会中断。
  • @AaronBertrand 好点!我真的很喜欢你使用 GO 的想法。我没有想到。谢谢!
  • @Juan SQLfiddle 有几个我见过的限制,一个是它每批只能输出一个结果集。这是一个稍加修改的查询,可以正常工作:sqlfiddle.com/#!6/9eecb7/1217
  • @AaronBertrand 我只是意识到我不能使用@variable 做两个SELECT。第二个SELECT 仅用于调试,其想法是使用@variable 两次。但正如你提到的那样做不到。
  • 你也有功劳。我比较视觉型的人。直到看到小提琴在运行,我才明白这个问题。我不明白 USING GO 的意思。
猜你喜欢
  • 2021-10-27
  • 2014-11-29
  • 2023-02-22
  • 2021-12-24
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2012-12-12
相关资源
最近更新 更多