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
我正在尝试在 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