Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 server 2008 如果第一个表中没有插入行,则从第二个表中选择插入临时表_Sql Server 2008_Sql Insert - Fatal编程技术网

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

Sql server 2008 如果第一个表中没有插入行,则从第二个表中选择插入临时表,sql-server-2008,sql-insert,Sql Server 2008,Sql Insert,我有下面的代码,当然,我真正的代码又长又丑,没人想看。逻辑非常简单,如果表1插入了任何行,则忽略表2 (long_common_column_list和long_common_,其中_list同时存在于表1和表2中) 如何组合这两个插入并重用长列表?我的代码中的插入脚本要长得多,每个脚本将近2000个字符 我搜索了一下,但没有找到。任何帮助或暗示都将不胜感激 您可以使用动态sql—将公共sql文本放入变量中,然后使用不常见的sql文本通过concatane构建这两个查询 像这样的 Declare

我有下面的代码,当然,我真正的代码又长又丑,没人想看。逻辑非常简单,如果表1插入了任何行,则忽略表2

long_common_column_listlong_common_,其中_list同时存在于表1和表2中)

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


我搜索了一下,但没有找到。任何帮助或暗示都将不胜感激

您可以使用动态sql—将公共sql文本放入变量中,然后使用不常见的sql文本通过concatane构建这两个查询

像这样的

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

你只是想清理你的代码?你的代码是正确的方法。虽然动态SQL可以让您重用一些代码,但要实现它却比较困难maintain@JasonCarter是的,我想打扫一下。我们收到了一个bug,因为在最新的更新中,我们添加了“orderby”子句,但只是粗心地添加到了第一部分。我想看看我们将来是否可以防止这种情况。这里是否有输入错误(
sp_execute
应该是
sp_executesql
)?目前这只是部分答案。
@param1
@param2
的值需要使用
sp_executesql
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