在SQL Server中替换低效的while语句

时间:2016-01-26 01:59:54

标签: sql sql-server performance while-loop

我需要在表格中搜索来自外部来源的多个电话号码。因为表中的格式不严格(1234567或123-4567),所以我使用了通配符并创建了一个临时表来存放数字。

然后,我通过数据库单独检查这些,并将它们放在第三个表中。

我已经读过光标类型命令效率不高,通常有更好的方法来解决SQL Server中的这些问题,但我的SQL知识充其量只是最小的,我甚至不知道从哪里开始。

查询按原样运行并完全返回我想要的内容,但是当我增加记录数时,它会线性增加执行时间,如果我想搜索1000个电话号码,这是不可持续的。

下面是我的代码片段。如何用更有效的方法替换它?如果我应该包含其他信息,请告诉我。

while @count_ < 77
Begin
    Select @record = (select number 
                      from @phoneNumbers
                      where Id_ = @count_)

    INSERT @updatesFinal
        SELECT 
            updates.[rowno], cust.no_, [empl],
            [emplbr], [time_], [super], [column_],
            [tablename], [urowno], [entered],
            [new], [old], [seqno_updatesix]
        FROM 
            [db1].[dbo].[updates]
        INNER JOIN
            db1.dbo.addr ON db1.rowno = updates.urowno
        INNER JOIN
            db1.dbo.cust ON cust.rowno = addr.rowno_custaddr_cust
        WHERE 
            updates.column_ LIKE ('phone%') 
            AND old LIKE @record

    SET @count_ = @count_ + 1
END

0 个答案:

没有答案