2009-11-22 17 views
13

我需要爲數據庫中的所有40個用戶表添加一個刪除標誌列。我可以編寫一個腳本來循環sys.tables,但我想我會檢查並查看是否有人有更好的解決方案,或者爲此場景預先創建的sql。在t-sql的所有用戶表中添加一列

回答

31

有一個無證但衆所周知的存儲過程sp_msforeachtable:

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

+1,但... seraphym是要求一種方式來刪除列。雖然你的陳述很容易被重寫,但是所有表格中的目標字段的名稱必須是統一的。 – 2009-11-22 20:18:03

+3

psasik,seraphym希望爲每個表添加一個名爲'delete'的列,而不是從每個表中刪除一列。 – 2009-11-22 20:21:44

+0

很酷,感謝您的幫助! – seraphym 2009-11-22 21:29:49

11

不,這是一個手動循環。

或者你可以建立當然是一個SQL語句...

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

或者無證

EXEC sys.sp_MSforeachtable 'ALTER TABLE ? ADD foo int NULL'