Sql server 2008 如果第一个表中没有插入行,则从第二个表中选择插入临时表
我有下面的代码,当然,我真正的代码又长又丑,没人想看。逻辑非常简单,如果表1插入了任何行,则忽略表2 (long_common_column_list和long_common_,其中_list同时存在于表1和表2中) 如何组合这两个插入并重用长列表?我的代码中的插入脚本要长得多,每个脚本将近2000个字符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
我搜索了一下,但没有找到。任何帮助或暗示都将不胜感激 您可以使用动态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