2009-11-22 23 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'