我想检查CTE表是否有记录或null。但我总是收到错误信息'关键字'IF'附近的SQL语法错误,如下面的SQL。现在ADMISSION_OUTSIDE TABLE中没有匹配的记录。 SQl的结果应该打印'NOT OK'。谢谢,
WITH ADMISSION_OUTSIDE AS
( .....
.....
)
IF EXISTS (SELECT * FROM ADMISSION_OUTSIDE)
PRINT 'OK'
ELSE PRINT 'NOT OK'
答案 0 :(得分:12)
来自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)
结果: NOT OK
;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
答案 1 :(得分:6)
我认为这也是检查价值存在并执行操作的最简单方法。
if (model.Name != null)
{
sb.AppendLine("<tr><td"><strong>Name: </strong></td><td>" + model.Name + "</td></tr>");
}
答案 2 :(得分:1)
有点hacky但你可以做这样的事情:
declare @x bit
;WITH CTE AS
(
SELECT 1 As 'column1'
)
SELECT @x = ISNULL(column1,0) from cte
If @x=1
begin
...
end
答案 3 :(得分:0)
因为必须使用声明结果后跟声明。除了结果不允许之外的任何其他声明。
答案 4 :(得分:0)
SQL Server返回该错误消息(&#34;语法错误&#34;),因为它不是有效的语句。
公用表表达式(CTE)本身不是一个单独的语句。它是表达式,它是另一个语句的一部分,可以是SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句。
https://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx