如果没有从第一个表插入行,则从第二个表中选择插入临时表

时间:2013-04-02 11:54:35

标签: sql-server-2008 sql-insert

我有以下代码,当然,我的真实代码很长很丑,没有人想看到它。逻辑非常简单,如果table_1插入了任何行,则忽略table_2。

table_1和table_2中都存在

long_common_column_list long_common_where_list

insert into tmp_table
  select id, long_common_column_list from table_1 where long_common_where_list = 1 and
  column_only_in_table_1 = @param1

if @@rowcount=0
  insert into tmp_table
    select id, long_common_column_list from table_2 where long_common_where_list = 1 and
   column_only_in_table_2 = @param2

如何组合两个插入并重用长长列表?我的代码中的插入脚本更长,每个近2000个字符。

我搜索但没有运气。任何帮助或提示表示赞赏。

1 个答案:

答案 0 :(得分:1)

你可以使用动态sql - 将常见的Sql文本放在变量中,然后通过concatane使用不常见的sql文本构建两个查询。

像这样的东西

Declare @sql nvarchar(max),@sql1 nvarchar(max),@sql2 nvarchar(max)

set @sql =  ' select id, long_common_column_list from '
SEt @sql1 = ' where long_common_where_list = 1 and '


SEt @sql2 = @sql + '  table_1 '+@sql1 +' column_only_in_table_1 = @param1' + char(13)+
        ' if @@rowcount=0 ' +  char(13) +
        @sql + ' table_2 ' +  @sql1 + ' column_only_in_table_2 = @param2'

--print @sql2
exec sp_executesql @SQl2