2009-11-22 25 views
13

Tôi cần thêm cột cờ xóa vào tất cả 40 bảng người dùng trong cơ sở dữ liệu. Tôi có thể viết một kịch bản để lặp qua sys.tables, nhưng tôi nghĩ rằng tôi muốn kiểm tra xem liệu có ai có giải pháp tốt hơn hay sql được tạo trước cho kịch bản này hay không.Thêm cột vào tất cả các bảng người dùng trong t-sql

Trả lời

31

Có một sp_msforeachtable thủ tục không có giấy tờ nhưng nổi tiếng được lưu trữ:

exec sp_msforeachtable 'alter table ? add flag bit not null default 0'; 
+0

+1 nhưng ... seraphym được yêu cầu cho một cách để loại bỏ một cột . Mặc dù tuyên bố của bạn có thể dễ dàng được viết lại để thả, tên của cột mục tiêu sẽ phải thống nhất trên tất cả các bảng. –

+3

psasik, seraphym muốn thêm cột có tên 'delete' vào mỗi bảng, không xóa một cột khỏi mỗi bảng. –

+0

rất tuyệt, cảm ơn sự giúp đỡ của bạn! – seraphym

11

Không, đó là một vòng tay.

Hoặc bạn có thể xây dựng một câu lệnh SQL đơn dĩ nhiên ...

SELECT 
    'ALTER TABLE ' + T.name + ' ADD foo int NULL' 
FROM 
    sys.tables AS T 
WHERE 
    T.is_ms_shipped = 0 

Hoặc không có giấy tờ

EXEC sys.sp_MSforeachtable 'ALTER TABLE ? ADD foo int NULL' 
Các vấn đề liên quan