INSERT INTO 的不同 SELECT

Different SELECT's for an INSERT INTO

我正在尝试在 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,但我认为我最初的方法不太容易出错。

不是这样的。但这是

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

另一种选择是使用 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