Sql 如何在不重复主select查询的情况下,基于参数将事例插入表中?
我在sql server 2008中有一个insert语句,如下所示: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
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多个表,其中一些是临时表,一些是永久表。