如何根据参数将案例插入表中而不重复主选择查询?

时间:2017-06-07 13:40:29

标签: sql sql-server sql-server-2008-r2

我在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

我现在处理上面的情况,但主要查询很长,我不想复制它,它看起来不专业。我正在寻找一种更好的方法来处理这样的问题。任何帮助或建议应该表示赞赏。感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用动态SQL(evil :),如下所示:

declare @cmd varchar(max) = '
INSERT INTO ' + @tableName + '
SELECT ...
';

execute (@cmd);

或者您创建存储过程(一个静态INSERT到表A,另一个到表B>>代码重复),这些过程根据@checkValue调用,或两者的组合,如下所示:

Stored procedure to insert values into dynamic table

答案 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