2012-01-05 95 views
1

改變所有[標題]一個SQL表沒有更新所有記錄 - 沒有條件

我使用了一個循環,但不知道如何影響更新語句中所有行的任何條件

它應該是輕鬆的一年

類似:

WHILE @counter < 89 
BEGIN 

    Update Products 
     SET Title = ('Product ' + @counter) 
     Where Title LIKE '' 
    SET @counter = @counter + 1 ; 
END 

SELECT Title FROM Products 
+0

所以看來你有解決方案,你要改進的地方? – alexm 2012-01-05 08:50:24

+0

我不認爲你甚至需要包含Where子句,因爲它會影響所有行,所以更新產品SET title =(whatever); – Andy 2012-01-05 08:51:26

+0

顯示使用整個代碼,我們將能夠重寫它,以避免循環;) – onedaywhen 2012-01-05 08:51:41

回答

4
Update Products 
    SET Title = ('Product ' + cast(@counter as varchar)) ; 

這將更新所有具有相同值的行

,如果你需要一個autonumerated不同的值,試試這個:

Update Products SET 
    Title = ('Product ' + cast(@counter as varchar)), 
    @counter = @counter+1 ; 

絕對工作,嘗試這

CREATE table t (a VARCHAR(100)) 

INSERT t VALUES('a') 
INSERT t VALUES('a') 
INSERT t VALUES('a') 
INSERT t VALUES('a') 


DECLARE @counter INT = 0 

UPDATE t SET a = 'aaa'+CAST(@counter AS VARCHAR), @counter = @counter+1 

SELECT * FROM t 

輸出是

a 
---- 
aaa1 
aaa2 
aaa3 
aaa4 
+0

沒有工作,沒有區別 – Sypress 2012-01-05 09:01:43

+0

向我們展示表格定義和錯誤或結果 – 2012-01-05 09:14:01

2

只是刪除where條件:

Update Products 
    SET Title = ('Product ' + @counter) ; 
+0

起初我使用這個,但不會工作,在最後'選擇'它後總是給我以前的結果集 – Sypress 2012-01-05 08:56:13

2

只需刪除其中 - 科查詢和一切都得到更新。

0
--Test data 
    DECLARE @Products TABLE(Title Varchar(20)) 

INSERT INTO @Products (Title) VALUES ('') 
INSERT INTO @Products (Title) VALUES ('') 
INSERT INTO @Products (Title) VALUES ('') 
INSERT INTO @Products (Title) VALUES ('') 
INSERT INTO @Products (Title) VALUES ('') 

--Query  
DECLARE @counter int 
SET @counter = 0 

UPDATE p 
SET Title = ('Product ' + CAST(@counter as varchar)), @counter = @counter+1 
FROM @Products p 

SELECT Title FROM @Products 
+0

-1更改你的答案,以適應「更新所有行」的條件,然後將+1從我 – 2012-01-05 09:01:14

+0

似乎很奇怪,再次沒有區別,在臨時表中它工作正常! – Sypress 2012-01-05 09:09:22

+0

謝謝奧列格,完成 – Mack 2012-01-05 09:43:11

3

嘗試下一個查詢:

create table #T (id int identity (0,1), Title varchar(10)) 

INSERT INTO #T (Title) VALUES ('') 
INSERT INTO #T (Title) VALUES ('') 
INSERT INTO #T (Title) VALUES ('') 
INSERT INTO #T (Title) VALUES ('') 
INSERT INTO #T (Title) VALUES ('') 
INSERT INTO #T (Title) VALUES (NULL) 
INSERT INTO #T (Title) VALUES ('xxxxxx') 

Update sub 
set 
Title = 'Product ' + cast(cntr as varchar) 
from 
(select Title, row_number() OVER (PARTITION BY ISNULL(Title,'') ORDER BY id ASC) as cntr from #T) sub 
where ISNULL(Title,'') = '' 


select * from #T