2013-02-18 70 views
3

我目前使用的是一個sql遊標來查找表來更新另一個表。我有一個包含很多短語的表格。我想更新另一個表來設置1,如果任何這些短語落入更新表中的任何一列。我使用遊標和字符來查找短語。光標需要很長時間,我只是想知道如果我可以使用其他任何東西而不是光標。謝謝。我使用的是SQL Server和這裏的代碼替代sql遊標

declare @word varchar(max) 
    declare @aCursor cursor for 
SELECT col from table 
    open acursor 
    fetch next from acursor into @word 
    while @@fetch_status=0 
    begin 
SET @word = '' + @word + '' 
UPDATE updatetable 
SET updatecol = 'y' 
FROM updatetable u, tableb b 
WHERE u.id = b.id AND (CHARINDEX(@word, u.name) > 0 OR CHARINDEX(@word, u.city) > 
    fetch next from acursor into @word 
    end 
    close acursor 
    deallocate acursor 
+0

*** *** ***只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......很多東西都是**高度**供應商特定的 - 所以我們真的需要知道你正在使用的數據庫系統**(和哪個版本)...... – 2013-02-18 19:31:09

+0

交叉應用也是一個選項: http://stackoverflow.com/questions/7492797/using-cross -apply-在更新語句 – Limey 2013-02-18 19:41:54

回答

5

看看:http://weblogs.sqlteam.com/jeffs/archive/2008/06/05/sql-server-cursor-removal.aspx,應該讓你的方式,你的方式。不過,我已經對這個問題進行了充分的討論,對於單獨的行操作,遊標是要走的路,性能與其他方法大致相同,可讀性比其他方法好10倍,這使得維護代碼變得更容易。

但是,我沒有足夠的細節,它似乎明白爲什麼你不能用更新語句來解決這個問題。