Bil*_*lla 5 sql sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2
如果表中存在具有相同数据类型和编号的列,我想更改表
原来的tTable结构是
表名
ColumnName NVARCHAR(100)
Run Code Online (Sandbox Code Playgroud)
ColumnName如果存在且NVARCHAR长度为 100则更改列的代码
IF EXISTS(...)
BEGIN
ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] NVARCHAR(200) [NULL|NOT NULL]
END
Run Code Online (Sandbox Code Playgroud)
我需要在什么位置插入查找查询IF EXISTS(...)?
我个人总是选择 SQL Server 系统视图而不是 INFORMATION_SCHEMA,原因由 Aaron Bertrand 详细说明。额外的优点是,在这种情况下,您可以排除计算列,这些列仅显示为表中的普通列INFORMATION_SCHEMA.COLUMNS。
IF EXISTS
( SELECT 1
FROM sys.columns c
INNER JOIN sys.types t
ON t.system_type_id = c.system_type_id
AND t.user_type_id = c.user_type_id
WHERE c.name = 'ColumnName'
AND c.[object_id] = OBJECT_ID(N'dbo.TableName', 'U')
AND t.name = 'nvarchar'
AND c.max_length = 100
AND c.is_computed = 0
)
BEGIN
ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] NVARCHAR(200) [NULL|NOT NULL]
END;
Run Code Online (Sandbox Code Playgroud)
如SQL Fiddle中所示,当使用信息模式方法时,您可能会尝试更改计算列并收到错误。