在所有表中,如果不存在,则添加一列?
在所有表中,如果不存在,则添加一列?
我正在使用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\' 附近存在语法错误。
... 对于每个表都是如此。
admin 更改状态以发布 2023年5月23日
你需要加入一些动态SQL。这应该可以工作:
EXEC sp_MSforeachtable ' declare @tblname varchar(255); SET @tblname = PARSENAME("?",1); declare @sql nvarchar(1000); if not exists (select column_name from INFORMATION_SCHEMA.columns where table_name = @tblname and column_name = ''CreatedOn'') begin set @sql = N''ALTER TABLE '' + @tblname + N'' ADD CreatedOn datetime NOT NULL DEFAULT getdate();'' exec sp_executesql @sql end '