2010-11-16 38 views

Trả lời

67
UPDATE employee 
SET AttributeValue = AttributeName, 
    AttributeName = AttributeValue 

Tuy nhiên, trừ khi cả hai cột đều có cùng định nghĩa, bạn có nguy cơ mất thông tin.

+0

"trừ khi cả hai cột có định nghĩa chính xác cùng, bạn có nguy cơ mất thông tin." - chỉ để chắc chắn, bạn đang nói, trừ khi hai cột là cùng một kiểu dữ liệu chúng ta có thể mất thông tin? Hoặc ý bạn là gì? thx – VoodooChild

+0

@VoodooChild - kiểu dữ liệu, vâng. Mặc dù bao gồm độ chính xác và kích thước nếu có liên quan. – Oded

+3

Không thể tin rằng nó đơn giản. Xuất phát từ tư duy của C++, bộ não của tôi cứ nói "nah ... điều đó sẽ không thành công. Cả hai giá trị sẽ kết thúc bằng bất cứ giá trị ban đầu nào của' AttributeName'. " –

11
Update employee 
Set attributeValue = attributeName, 
    attributeName = attributeValue 
4

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue

3

Đây là thực sự tốt dụ

SELECT * from employees; 
Go 

DECLARE @temp as varchar(20) 
update employees 
set @temp = fname, 
     fname = lname, 
     lname = @temp 
WHERE deptno = 10; 
GO 

SELECT * from employees; 

Result

+0

Bạn có thể giải thích hành vi này không? Đầu tiên, công cụ cơ sở dữ liệu có gán 'fname' cho' @ temp' không, sau đó giả sử 'lname' thành' fname', sau đó '@ temp' thành' lname'? Nếu đây là trường hợp, làm thế nào để bạn giải thích 'set a = b, b = a'? – Gqqnbig

+1

Tại sao bạn sẽ làm điều này? Bạn không cần một biến hoán đổi, hãy kiểm tra câu trả lời của Oded. – sventevit

1
Declare @myTable Table (id int, first_name varchar(50), last_name varchar(50)); 

Select * from Student 

Insert Into @myTable (id, first_name, last_name) Select id, last_name, first_name from Student 

    MERGE 
    INTO Student std 
    USING @myTable tmp 
    ON std.id = tmp.id 
    WHEN MATCHED THEN 
    UPDATE 
    SET std.first_name = tmp.first_name, 
    std.last_name = tmp.last_name; 

Select * from Student 

Output

Query Result Screenshot

0

Chỉ cần hoán đổi cả cột trong một cập nhật duy nhất:

Update registration 
Set AttributeName = AttributeValue , 
    AttributeValue = AttributeName where id in (1,2,3) 
Các vấn đề liên quan