我有以下SP(为清晰起见,已缩小):
private void toolStripButton4_Click(object sender, EventArgs e)
{
toolStrip1.Items[0].BackColor = SystemColors.ActiveCaption;
toolStrip1.Items[1].BackColor = SystemColors.Control;
toolStrip1.Items[2].BackColor = SystemColors.Control;
toolStrip1.Items[3].BackColor = SystemColors.Control;
}
我得到了错误:
'IF'附近的语法不正确
'IF'在行中
IF(NULLIF(@filter,'')为NULL)
为什么会出现此错误,以及表达以上SQL语法的正确方法是什么?
答案 0 :(得分:1)
内部If语句放置在错误的位置。 with格式为
With <col> as
(
---
)
SELECT ---
此外,我认为NULLIF在这里没有目的。通常,如果可以在不使用函数的情况下进行编写,则不要使用函数(出于性能方面的考虑)
最终程序将是:
CREATE PROCEDURE sp
@id int,
@filter varchar(255) = NULL
AS
BEGIN
IF (@id != 0)
BEGIN
IF (@filter = '')
BEGIN
WITH cte AS
(
--SELECT here...
)
SELECT *
FROM cte;
END
END
END
答案 1 :(得分:0)
CTE必须位于“ IF(NULLIF(@filter,'')IS NULL)”内部。创建CTE后必须立即使用。这应该起作用:
CREATE PROCEDURE sp
@id int,
@filter varchar(255) = NULL
AS
BEGIN
IF (NULLIF(@id, 0) IS NOT NULL)
BEGIN
IF (NULLIF(@filter, '') IS NULL)
BEGIN
WITH cte AS
(
--SELECT here...
)
SELECT *
FROM cte;
END
END
END