我继承了一个似乎有点混乱的查询,或者至少当我看到它时,我认为必须有更好的方法。查询:
select distinct 'INSERT INTO table1 SELECT '''+ACCT_NUM +''',* FROM table2 where library=''' + isnull(library,'') + '''' +
CASE
when CO is not NULL then ' and CO=''' +CO + ''''
else isnull(CO,'')
END +
CASE
when ACCTNO is not NULL then CASE WHEN LEN(acctNO)>5 then ' and ACCTNO=''' +ACCTNO + '''' else ' and ACCTNO like ''' +rtrim(ACCTNO) +'%'+ '''' END
else isnull(ACCTNO,'')
END +
CASE
when FILEDN is not NULL then ' and coalesce(nullif(PRMSTE,''''),ACCSTE)=''' +FILEDN + ''''
else isnull(FILEDN,'')
END +
CASE
when LOCNUM is not NULL then ' and LOCNUM=''' +LOCNUM + ''''
else isnull(LOCNUM,'')
END MySQL
INTO #temp
from table3
它生成一个INSERT语句表,然后通过sp_executesql循环并执行。任何帮助,将不胜感激。我一直在查看这个查询超过2个月,我似乎无法绕过一个更好的方法来做这件事。
具体来说,我希望将其归结为一个'INSERT'语句或'SELECT ... INTO ...'
答案 0 :(得分:2)
我认为你需要完全抛弃这个sql并从头开始 生成一个insert语句表然后执行它们 - 真的吗? 非常非常糟糕的主意。
将您需要的VALUES插入临时表,而不是INSERT语句。
我建议对临时表进行一些研究 - 看一下这篇文章的开头:http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server