我在sql server 2008中有一个insert语句,如下所示:
INSERT INTO MYTABLE
SELECT Id,Name,Date
FROM #temp
...joins...
where ...conditions...
我需要在代码中添加一个参数,根据参数,我将决定输出数据应插入哪个表。检查以下内容:
declare @checkValue bit;
if (@checkValue = 1)
begin
INSERT INTO MYTABLE
SELECT Id,Name,Date
FROM #temp
...joins...
where ...conditions...
end
else
begin
INSERT INTO MY_OTHER_TABLE
SELECT Id,Name,Date
FROM #temp
...joins...
where ...conditions...
end
我现在处理上面的情况,但主要查询很长,我不想复制它,它看起来不专业。我正在寻找一种更好的方法来处理这样的问题。任何帮助或建议应该表示赞赏。感谢。
答案 0 :(得分:3)
您可以使用动态SQL(evil :),如下所示:
declare @cmd varchar(max) = '
INSERT INTO ' + @tableName + '
SELECT ...
';
execute (@cmd);
或者您创建存储过程(一个静态INSERT到表A,另一个到表B>>代码重复),这些过程根据@checkValue调用,或两者的组合,如下所示:
答案 1 :(得分:0)
创建SP:
CREATE PROCEDURE ExampleSelect
AS
SELECT Id,Name,Date
FROM #temp
...joins...
where ...conditions...
GO
使用insert..exec插入数据:
declare @checkValue bit;
if (@checkValue = 1)
begin
INSERT INTO MYTABLE
EXEC ExampleSelect
end
else
begin
INSERT INTO MY_OTHER_TABLE
EXEC ExampleSelect
end