尝试在TSQL的if exists子句中分配变量
DECLARE @myvar int
IF EXISTS (SELECT @myvar = theTable.varIWant..... )
我认为这会奏效,但显然不是吗?或许(更有可能)我做错了。
答案 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];