在IF EXISTS子句中分配变量

Kam*_*mbo 21 sql t-sql variables

尝试在TSQL的if exists子句中分配变量

DECLARE @myvar  int

IF EXISTS (SELECT @myvar = theTable.varIWant..... )
Run Code Online (Sandbox Code Playgroud)

我认为这会奏效,但显然不是吗?或许(更有可能)我做错了.

And*_*y M 20

在我安装的SQL Server 2008 R2中,它根本无法编译.解析器抱怨附近有不正确的语法=.

我认为它必须与在单个SELECT语句中混合值赋值和数据检索有关,这在SQL Server中是不允许的:您可以拥有其中一个或另一个.因为,当您分配值时,不返回行集但EXISTS谓词需要它,在该上下文中不能允许赋值,因此,为避免混淆,可能必须明确强加限制.

您在评论中谈到的解决方法是一个不错的方法,但是当变量在赋值之前已经获得了值时,在批处理中间的某个地方可能无法正常工作.所以我可能会使用这种解决方法:

SELECT @myvar = ...
IF @@ROWCOUNT > 0 ...
Run Code Online (Sandbox Code Playgroud)

根据MSDN,@@ROWCOUNT系统函数返回查询读取的行数.


小智 7

IF EXISTS你可以做,而不是做

DECLARE @myvar  int
SELECT @myvar = theTable.varIWant.....;
IF @myvar IS NULL
BEGIN...
Run Code Online (Sandbox Code Playgroud)