我想检查一个CTE表是否有记录或者为空。但是我总是得到以下SQL错误消息:“关键字'IF'附近的语法不正确”。现在ADMISSION_OUTSIDE TABLE中没有匹配的记录。 SQL的结果应该打印“NOT OK”。谢谢。
WITH ADMISSION_OUTSIDE AS
( .....
.....
)
IF EXISTS (SELECT * FROM ADMISSION_OUTSIDE)
PRINT 'OK'
ELSE PRINT 'NOT OK'
我想检查一个CTE表是否有记录或者为空。但是我总是得到以下SQL错误消息:“关键字'IF'附近的语法不正确”。现在ADMISSION_OUTSIDE TABLE中没有匹配的记录。 SQL的结果应该打印“NOT OK”。谢谢。
WITH ADMISSION_OUTSIDE AS
( .....
.....
)
IF EXISTS (SELECT * FROM ADMISSION_OUTSIDE)
PRINT 'OK'
ELSE PRINT 'NOT OK'
来自MSDN
CTE 必须后跟一个单一的 SELECT、INSERT、UPDATE 或 DELETE 语句,该语句引用了所有或部分 CTE 列。
可以像这样重新编写
WITH ADMISSION_OUTSIDE AS
( .....
.....
)
SELECT 'OK' WHERE EXISTS (SELECT * FROM ADMISSION_OUTSIDE)
UNION ALL
SELECT 'NOT OK' WHERE NOT EXISTS (SELECT * FROM ADMISSION_OUTSIDE)
这是一个演示
;WITH CTE AS
(
SELECT 1 as a WHERE 1=0
)
SELECT 'OK' WHERE EXISTS (SELECT * FROM CTE)
UNION ALL
SELECT 'NOT OK' WHERE NOT EXISTS (SELECT * FROM CTE)
结果 : 不合格
;WITH CTE AS
(
SELECT 1 as a WHERE 1=1
)
SELECT 'OK' WHERE EXISTS (SELECT * FROM CTE)
UNION ALL
SELECT 'NOT OK' WHERE NOT EXISTS (SELECT * FROM CTE)
结果: OK
SELECT case when exists (SELECT * FROM CTE) then 'OK' else 'NOT OK' end
。 - RoryWITH ADMISSION_OUTSIDE AS
( .....
.....
)
SELECT CASE WHEN (SELECT COUNT(1) tot
FROM ADMISSION_OUTSIDE) > 0 THEN 'OK' ELSE 'NOT OK' END
declare @x bit
;WITH CTE AS
(
SELECT 1 As 'column1'
)
SELECT @x = ISNULL(column1,0) from cte
If @x=1
begin
...
end
由于必须使用with语句结果跟随with语句,因此不允许使用除with语句结果以外的任何其他语句。
请参阅更多信息:无法在WITH语句之后删除表
SQL Server返回该错误消息(“语法不正确”),因为它不是有效的语句。
通用表达式(CTE)本身不是单独的语句。它是另一个语句的一部分,可以是SELECT、INSERT、UPDATE、DELETE或CREATE VIEW语句中的一个表达式。
https://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx
SELECT, INSERT, UPDATE或DELETE
语句。 - Vamsi Prabhala