2012-09-18 45 views
6

Làm thế nào tôi có thể đạt được điều này trong sql giao dịch.Thay đổi bảng sau đó cập nhật

Tôi muốn thêm cột mới vào bảng hiện có và sau đó cập nhật nó bằng một số giá trị. Có thể làm điều đó trong một kịch bản sql hoặc tôi nên sử dụng các script riêng biệt?

Đây là một mẫu mã

ALTER TABLE my_table ADD my_new_column bit NULL; 

UPDATE my_table SET my_new_column = 0; 

Tôi biết rằng tôi đang làm văn bản trong khi cột vẫn không tồn tại do đó, thats lý do tại sao hai dòng sau không làm việc. Nhưng làm thế nào để đạt được điều này trong một kịch bản, tức là sử dụng một số chậm trễ hoặc làm thế nào để chắc chắn cột được tạo ra và sau đó ghi dữ liệu vào nó?

Tôi đã sử dụng IF EXISTS với lựa chọn từ bảng nhưng nó không hoạt động.

nhờ

Trả lời

14

Bạn có thể thêm các cột mới và cư nó cùng một lúc bằng cách thêm một mặc định và sử dụng các khoản WITH VALUES. Sau đó, bạn có thể thả mặc định ở cuối nếu không còn cần thiết nữa. Cách tiếp cận này có thể được sử dụng cho nhiều cột như dưới đây.

ALTER TABLE [myTable] 
ADD [my_new_column] [bit] NULL CONSTRAINT DF_TMP DEFAULT 0 , 
    [my_new_column2] [bit] NULL CONSTRAINT DF_TMP2 DEFAULT 1 WITH VALUES; 

ALTER TABLE [myTable] DROP DF_TMP, DF_TMP2 
+0

Nếu tôi muốn cập nhật một số trường có giá trị khác 0, như 1 thì sao? Đã thử truy vấn này nó hoạt động tốt, nhưng tôi vẫn muốn sử dụng bản cập nhật sau đó. – Vlad

+2

Bạn có thể thêm nhiều cột và ràng buộc mặc định theo cùng một cách. Ngoài ra, tốt nhất là nên thực hiện DDL trong một lô khác với DML để tránh phân tích các vấn đề (hoặc bằng cách thêm 'GO' giữa các câu lệnh hoặc bằng cách sử dụng' EXEC' phụ thuộc vào ngữ cảnh bạn cần thực hiện) –

+0

lời khuyên. Có DDL nên được tách ra khỏi DML, luôn luôn. Trong trường hợp này, tôi cần kịch bản đơn giản để hoàn thành nhiệm vụ đơn giản. Dù sao tôi đã sử dụng câu trả lời này ở đây với GO tuyên bố và nó làm việc như tôi mong đợi http://stackoverflow.com/questions/1293638/sql-alter-table-then-modify-values – Vlad

Các vấn đề liên quan