【发布时间】:2009-10-13 03:42:43
【问题描述】:
昨晚我在写一个类似这样的简单 T-SQL 程序
DECLARE @ROLEID AS INT
SELECT @ROLEID = [ROLE ID] FROM TBLROLE
;WITH CTE
AS
(
SELECT * FROM SOMETABLE
)
IF (@ROLEID = 1)
BEGIN
//SOMECODE
END
ELSE IF(@ROLEID = 2)
BEGIN
//SOMECODE
END
ELSE
BEGIN
//SOMECODE
END
我在编译后发现它会抛出类似“Incorrect statement near if”之类的错误
怎么了?
但是,我通过其他方式做到了这一点。但我想知道为什么它不起作用!
【问题讨论】:
-
在每种情况下 //SOMECODE 的作用是什么?例如,如果它们都是针对同一个表的 UPDATE 语句,那么您可以使用 @ROLEID 变量省略过程代码,而是使用基于集合的方法编写单个 UPDATE。
-
其实我是在选择像 select * from tblname 这样的记录。没有任何 dml 操作
-
改用临时表
标签: sql sql-server sql-server-2005 tsql common-table-expression