代码之家  ›  专栏  ›  技术社区  ›  theJ

添加不存在的列

  •  2
  • theJ  · 技术社区  · 6 年前

    [LastModified] 列,我想为那些不匹配的列创建列。

    IF EXISTS(SELECT 1 FROM sys.columns 
          WHERE Name = N'LastModified'
          AND Object_ID = Object_ID(N'dbo.Branch'))
    (SELECT [ID]
    ,ISNULL([Name], '') AS [Name]
    ,ISNULL([Code], '') AS [Code]
    ,ISNULL([LastModified], '') AS [LastModified]
    ,[TimeStampField] from [dbo].[Branch])
    ELSE
    (SELECT [ID]
    ,ISNULL([Name], '') AS [Name]
    ,ISNULL([Code], '') AS [Code]
    ,getdate() AS [LastModified]
    ,[TimeStampField] from [dbo].[Branch])
    

    我得到错误-列名“LastModified”无效。

    如果我改变 ISNULL([LastModified], '') AS [LastModified] GetDate() AS [LastModified] [上次修改]

    有没有更好的方法来实现这个,派生列函数?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Tab Alleman    6 年前

    可以使用动态sql执行此操作:

    DECLARE @sql varchar(max);
    
    IF EXISTS(SELECT 1 FROM sys.columns 
          WHERE Name = N'LastModified'
          AND Object_ID = Object_ID(N'dbo.Branch'))
    SET @sql = 'SELECT [ID]
    ,ISNULL([Name], '') AS [Name]
    ,ISNULL([Code], '') AS [Code]
    ,ISNULL([LastModified], '') AS [LastModified]
    ,[TimeStampField] from [dbo].[Branch]';
    ELSE
    SET @sql = 'SELECT [ID]
    ,ISNULL([Name], '') AS [Name]
    ,ISNULL([Code], '') AS [Code]
    ,getdate() AS [LastModified]
    ,[TimeStampField] from [dbo].[Branch]';
    
    EXEC(@sql);