【发布时间】:2011-07-05 23:42:45
【问题描述】:
我使用的是 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”附近的语法不正确。 ... 等等,对于每个表。
【问题讨论】:
-
@JAiro:这绝对是一个相关的链接,但是“如果不存在”规则很重要,并且让它变得更复杂一些。
-
好的,你可以用这个来完成信息:stackoverflow.com/questions/133031/…
-
您问题的根本原因是依赖于 INFORMATION_SCHEMA 视图并且必须将名称拆分为模式和对象。只需使用
object_id(''?'')就可以了。更快的检查是if COLUMNPROPERTY(object_id(''?''), ''CreatedOn'', ''ColumnId'') is null。
标签: sql sql-server tsql sql-server-2008 alter-table