SQL Server - 检查列是否存在>>重命名和更改类型

时间:2018-06-10 10:13:19

标签: sql sql-server sql-server-2008

SQL Server:

  • 时检查列是否存在
  • 如果为True :(更改/修改)column_name和dataType

  • 如果为假:创建

架构名称:设置

代码:

IF EXISTS (SELECT 1 FROM sys.columns  
           WHERE Name = N'bitIntialBalance' 
             AND Object_ID = Object_ID(N'Setup.LeaveVacationsSubType'))
BEGIN
    ALTER TABLE [Setup].[LeaveVacationsSubType] 
        ALTER COLUMN intIntialBalance INT NULL; 

    EXEC sp_RENAME 'Setup.LeaveVacationsSubType.bitIntialBalance', 'intIntialBalance', 'COLUMN';
    --ALTER TABLE [Setup].[LeaveVacationsSubType] MODIFY [intIntialBalance] INT; not working
END
GO

IF NOT EXISTS(SELECT 1 FROM sys.columns  
              WHERE Name = N'intIntialBalance' 
                AND Object_ID = Object_ID(N'Setup.LeaveVacationsSubType'))
BEGIN
    ALTER TABLE [Setup].[LeaveVacationsSubType] 
        ADD intIntialBalance INT NULL; 
END
GO

1 个答案:

答案 0 :(得分:2)

如果我猜对了,问题是对整个脚本进行了查询计划,并且SQL Server还会检查它是否可以实际执行所有操作,即使它在if语句中也是如此。这就是为什么你会收到错误的原因,即使实际上该陈述永远不会被执行。

解决此问题的一种方法是使所有这些语句动态化,如下所示:

execute ('ALTER TABLE [Setup].[LeaveVacationsSubType] MODIFY [intIntialBalance] INT')