查询优化 - 我有一个需要第二组眼睛的查询

时间:2014-06-11 15:10:40

标签: sql sql-server refactoring

我继承了一个似乎有点混乱的查询,或者至少当我看到它时,我认为必须有更好的方法。查询:

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 ...'

1 个答案:

答案 0 :(得分:2)

我认为你需要完全抛弃这个sql并从头开始 生成一个insert语句表然后​​执行它们 - 真的吗? 非常非常糟糕的主意。

将您需要的VALUES插入临时表,而不是INSERT语句。

我建议对临时表进行一些研究 - 看一下这篇文章的开头:http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server