INSERT INTO的不同SELECT

时间:2015-06-12 19:13:55

标签: sql sql-server-2005

我试图在INSERT INTO语句之后有一个IF块,并根据某些条件,执行一个不同的SELECT,它将提供INSERT INTO。

这是我尝试做的一个(失败的)示例:

INSERT INTO #TempTable (COL1, COL2, COL3)
    IF @VAR = 'YES'
        BEGIN
            SELECT * FROM TABLE
        END
    ELSE
        BEGIN
            SELECT * FROM TABLE WHERE REGDATE <= '2015-06-12'
        END

但是当我试图保存存储过程时,我总是这样做。

Incorrect syntax near the keyword 'IF'

我想构建一个字符串并使用sp_executesql,但我认为我的初始方法不容易出错。

2 个答案:

答案 0 :(得分:1)

它不起作用。但这是

INSERT INTO #TempTable (COL1, COL2, COL3)
SELECT * FROM TABLE
WHERE @VAR = 'YES' OR REGDATE <= '2015-06-12'

答案 1 :(得分:1)

另一种选择是使用CASE语句或IF语句。也许这个?它非常接近你所拥有的:

CREATE TABLE TABLE1 (a INT, b INT, c INT);
CREATE TABLE TABLE2 (a INT, b INT, c INT);
CREATE TABLE TABLE3 (a INT, b INT, c INT);

INSERT INTO TABLE2 VALUES(1,2,3);
INSERT INTO TABLE3 VALUES(4,5,6);

DECLARE @VAR VARCHAR(MAX) = 'YES'

IF @VAR = 'YES'
BEGIN
    INSERT INTO TABLE1
    SELECT * FROM TABLE2
END

ELSE
BEGIN
    INSERT INTO TABLE1
    SELECT * FROM TABLE3
END