2016-08-18 52 views
-1

我得到了一個錯誤,我一直在研究與我的SQL代碼,當我嘗試更新用戶時,它決定編輯我的整個數據庫,而不是一個條目。代碼工作以前,直到我把它放入一個單一的入境,而不是單個的。錯誤問題 - SQL查詢需要編輯一行

IF exists (SELECT USERID FROM WUSERS WHERE USERID='XXXXX') 
begin 

-- Update it 
print 'updated' 
update WUSERS set FULLNAME= 'XXXXX' update WUSERS set PW= 'XXXXX' update WUSERS set telno= 'XXXXX' update WUSERS set email= '[email protected]' update WUSERS set ROLEID= 'X' update WUSERS set dept= 'XXX' where userid= 'XXXXX' 
end 

else 
begin 

-- add it 
print 'added' 
insert into WUSERS (USERID,PW,FULLNAME,TELNO,EMAIL,ROLEID,DEPT) Values ('XXXXX','XXXXX','XXXXX','XXXXX','[email protected]','X','XXX') 
end 

這就是我現在得到的,我正在努力查看出了什麼問題。請忽略X的這只是放置實際數據。

乾杯,

歐文

+0

標籤您正在使用的數據庫管理系統。 (這段代碼看起來不像ANSI SQL。) – jarlh

+0

對不起 – Englishman

+2

你的更新語句中沒有where子句 – Jeremy

回答

3

您需要用分號分隔語句。但是,你只是想設置多個欄目:

update WUSERS 
    set FULLNAME = 'XXXXX', 
     PW = 'XXXXX', 
     telno = 'XXXXX', 
     email = '[email protected]', 
     ROLEID = 'X', 
     dept = 'XXX' 
    where userid= 'XXXXX'; 
+0

只是一個樣式註釋:恕我直言'SET'應該與UPDATE相同,因爲它是必需的'UPDATE'語法,然後列分配將只縮進一個級別。更少的線條,更少的縮進。 'UPDATE ... SET'就像'SELECT ...',它引入了一個所需的非表類項目列表。 'SET'與'FROM'不同,它引入了一個表(通常是大小爲1)。 – Bohemian

+0

@波希米亞。 。 。 SQL有很多樣式。我偏向於在行首開始放置關鍵字。 –

0

的每個更新語句需要一個where子句,而不僅僅是最後一...

如。

update WUSERS set FULLNAME= 'XXXXX' 
update WUSERS set PW= 'XXXXX' 

應該是;

update WUSERS set FULLNAME= 'XXXXX' WHERE Whatever 
update WUSERS set PW= 'XXXXX' WHERE Whatever 

作爲一個附註,您可以一次更新多個字段;

update WUSERS set FULLNAME= 'XXXXX', 
        PW= 'XXXXX' 
WHERE Whatever 
0

而是其操作相互所有線路上的多個更新,你可以把它改寫到一個更新至極有WHERE條款

更換你6更新statment至極的樣子

UPDATE WUSERS 
    SET FULLNAME = 'XXXXX' 

UPDATE WUSERS 
    SET PW = 'XXXXX' 

UPDATE WUSERS 
    SET telno = 'XXXXX' 

UPDATE WUSERS 
    SET email = '[email protected]' 

UPDATE WUSERS 
    SET ROLEID = 'X' 

UPDATE WUSERS 
    SET dept = 'XXX' 
WHERE userid = 'XXXXX' 

通過

UPDATE WUSERS 
    SET FULLNAME = 'XXXXX', 
     PW = 'XXXXX', 
     telno = 'XXXXX', 
     email = '[email protected]', 
     ROLEID = 'X', 
     dept = 'XXX' 
WHERE userid = 'XXXXX' 
0

對於每個更新語句,您必須指定一個where子句。想一想,你要告訴數據庫更新表WUSERS以設置FULLNAME = 'xxxx'。數據庫如何知道未更新的確切行?

E.g.

update WUSERS set FULLNAME= 'XXXXX' where "some_logical_statement" 

或者,您還可以在最後包含單個where子句。

0

你使用多個更新以及where語句只得到最後一次更新語句中找到,把更新一起類似如下:

IF exists (SELECT USERID FROM WUSERS WHERE USERID='XXXXX') 
begin 

-- Update it 
print 'updated' 
UPDATE WUSERS 
SET FULLNAME = 'XXXXX', 
    PW = 'XXXXX', 
    telno = 'XXXXX', 
    email = '[email protected]', 
    ROLEID = 'X', 
    dept = 'XXX' 
where userid= 'XXXXX' 

END 

ELSE 
BEGIN 

    -- add it 
    print 'added' 
    insert into WUSERS (USERID,PW,FULLNAME,TELNO,EMAIL,ROLEID,DEPT) 
    Values ('XXXXX','XXXXX','XXXXX','XXXXX','[email protected]','X','XXX') 

END