对于Sql Server 2005和2008我想检查列是否已经存在于一个给定的表,并创建它,如果它不。这个新列应该有一个ExistingColumn的默认值。目前我需要使用动态sql来填充新列,因为sql server会抱怨语法错误。将列添加到现有的表和默认值到另一列没有动态sql
这是当前的SQL Server代码:
IF NOT EXISTS (SELECT TOP 1 1 FROM sys.columns WHERE [name] = N'NewColumn' AND OBJECT_ID = OBJECT_ID(N'ExistingTable'))
BEGIN
ALTER TABLE [dbo].[ExistingTable] ADD [NewColumn] VARCHAR(50) NULL;
exec sp_executesql N'UPDATE [dbo].[ExistingTable] SET NewColumn = ExistingColumn'
ALTER TABLE [dbo].[ExistingTable] ALTER COLUMN [NewColumn] VARCHAR(50) NOT NULL
END
GO
有没有其他的办法来解决这个问题,而不是诉诸动态sql?
为什么不喜欢动态sql作为解决方案? – 2013-03-07 19:03:04
除了没有获得Management Studio的语法高亮和自动完成之外,我对它没有任何问题。对于封面上真正发生的事情更加好奇。 – 2013-03-07 19:04:21
啊,我通常用Print来代替exec,然后在另一个窗口粘贴它不是很亮,但是最好是试图找出附近的错误,意思是 – 2013-03-07 20:44:11