和瑞 发表于 2023-9-14 12:00:34

如果所有表都不存在,请添加列吗?

我正在使用SQL Server
2005/2008。我需要向表中添加一列(如果尚不存在)。这将应用于给定数据库中的所有表。我希望我能早一点,但与此解决方案有关。
如何才能做到这一点?
这是我所拥有的:
EXEC sp_MSforeachtable '
    declare @tblname varchar(255);
    SET @tblname =PARSENAME("?",1);
    if not exists (select column_name from INFORMATION_SCHEMA.columns
                   where table_name = @tblname and column_name = ''CreatedOn'')
    begin
      ALTER TABLE @tblname ADD CreatedOn datetime NOT NULL DEFAULT getdate();
    end
'
但是我得到了错误:

错误102:“ @ tblname”附近的语法不正确。’CreatedOn’附近的语法不正确。“
@tblname”附近的语法不正确。’CreatedOn’附近的语法不正确。…依此类推,针对每个表格。

               
解决方案:
               


                您不能在DDL中使用变量,例如@tableName。此外,将名称分成部分并忽略架构只会导致错误。您应该只在SQL批处理参数中使用“?”替换,然后依靠MSforeachtable替换:
EXEC sp_MSforeachtable '
if not exists (select * from sys.columns
               where object_id = object_id(''?'')
               and name = ''CreatedOn'')
begin
    ALTER TABLE ? ADD CreatedOn datetime NOT NULL DEFAULT getdate();
end';
页: [1]
查看完整版本: 如果所有表都不存在,请添加列吗?