Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在不重复主select查询的情况下,基于参数将事例插入表中?_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql 如何在不重复主select查询的情况下,基于参数将事例插入表中?

Sql 如何在不重复主select查询的情况下,基于参数将事例插入表中?,sql,sql-server,sql-server-2008-r2,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 SEL

我在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
我现在处理的是上面的情况,但是主查询很长,我不想重复它,我觉得它不专业。我正在寻找更好的方法来处理这样的问题。任何帮助或建议都应受到感谢。谢谢。

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

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

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

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

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

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

创建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
创建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

是否有必要使用临时表?如果没有它,您可以使用表值函数。事实上,连接在原始查询中有20多个表,其中一些是临时表,一些是永久表。是否有必要使用#临时表?如果没有它,您可以使用表值函数。事实上,在连接中,原始查询中有20多个表,其中一些是临时表,一些是永久表。