在T-SQL中为所有用户表添加一列

4 浏览
0 Comments

在T-SQL中为所有用户表添加一列

我需要在数据库的所有40个用户表中添加一个删除标志列。我可以编写一个脚本来遍历sys.tables,但我想先检查一下是否有更好的解决方案或者针对这种情况的预先创建的SQL。

0
0 Comments

在T-SQL中为所有用户表添加一列的问题出现的原因是需要对每个用户表执行相同的操作。解决方法有两种:一种是使用循环,另一种是构建一个包含所有操作的SQL语句。

使用循环的方法如下:

DECLARE @sql NVARCHAR(MAX) = N''
SELECT @sql += N'ALTER TABLE ' + QUOTENAME(T.name) + ' ADD foo int NULL;'
FROM sys.tables AS T
WHERE T.is_ms_shipped = 0
EXEC sp_executesql @sql

其中,`sys.tables`是系统表,`T.is_ms_shipped = 0`用于排除系统表。通过循环遍历每个用户表,将每个表的名称和添加列的操作拼接到一个SQL语句中,最后使用`sp_executesql`执行该语句。

另一种方法是使用`sys.sp_MSforeachtable`存储过程,该存储过程是一个未记录的功能:

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

该存储过程可以对每个表执行指定的SQL语句。在这种情况下,使用`ALTER TABLE ? ADD foo int NULL`作为要执行的SQL语句,`?`将被替换为当前表的名称。

无论使用哪种方法,都可以为所有用户表添加一个名为`foo`的空列。这些方法可以根据需要进行修改和扩展,以满足特定的业务需求。

0
0 Comments

问题:如何向所有用户表中添加一个列?

原因:用户想要在所有用户表中添加一个名为'delete'的列。

解决方法:使用存储过程sp_msforeachtable来实现。该存储过程可以在所有用户表上执行相同的操作。具体操作为使用ALTER TABLE语句在每个表中添加一个名为'delete'的列,类型为bit,非空,默认值为0。

具体代码如下:

exec sp_msforeachtable 'alter table ? add [delete] bit not null default 0';

0