在IF EXISTS子句中分配变量

时间:2011-12-22 02:15:57

标签: sql tsql variables

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

DECLARE @myvar  int

IF EXISTS (SELECT @myvar = theTable.varIWant..... )

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

4 个答案:

答案 0 :(得分:20)

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

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

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

SELECT @myvar = ...
IF @@ROWCOUNT > 0 ...

As per MSDN@@ROWCOUNT系统函数返回查询读取的行数。

答案 1 :(得分:7)

而不是IF EXISTS,你可以做

DECLARE @myvar  int
SELECT @myvar = theTable.varIWant.....;
IF @myvar IS NULL
BEGIN...

答案 2 :(得分:1)

它不起作用只是因为在EXISTS构造中,sql server只验证是否存在任何行,并且它与select-columns或assignment部分无关。 这样做是为了优化性能。

答案 3 :(得分:-2)

你试过数吗?

SELECT @Exists =  CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
FROM [dbname].[dbo].[tableorviewname];
相关问题