DECLARE @Local TABLE中的条件列

时间:2017-09-27 15:33:08

标签: sql sql-server tsql

我似乎找不到在本地表中声明条件列的正确解决方案。

第二个表格有一个额外的列SnapshotURL

DECLARE @product_major_version int;
SELECT @product_major_version = CAST(SERVERPROPERTY('ProductMajorVersion') AS int);

IF (@product_major_version <= 12)
    DECLARE @FileList TABLE 
    ( 
        LogicalName            NVARCHAR(128) NOT NULL 
        , PhysicalName         NVARCHAR(260) NOT NULL 
        , Type                 CHAR(1) NOT NULL 
        , FileGroupName        NVARCHAR(120) NULL 
        , Size                 NUMERIC(20, 0) NOT NULL 
        , MaxSize              NUMERIC(20, 0) NOT NULL 
        , FileId               BIGINT NULL 
        , CreateLSN            NUMERIC(25, 0) NULL 
        , DropLSN              NUMERIC(25, 0) NULL 
        , UniqueID             UNIQUEIDENTIFIER NULL 
        , ReadOnlyLSN          NUMERIC(25, 0) NULL 
        , ReadWriteLSN         NUMERIC(25, 0) NULL 
        , BackupSizeInBytes    BIGINT NULL 
        , SourceBlockSize      INT NULL 
        , FileGroupId          INT NULL 
        , LogGroupGUID         UNIQUEIDENTIFIER NULL 
        , DifferentialBaseLSN  NUMERIC(25, 0) NULL 
        , DifferentialBaseGUID UNIQUEIDENTIFIER NULL 
        , IsReadOnly           BIT NULL 
        , IsPresent            BIT NULL 
        , TDEThumbprint        VARBINARY(32) NULL  
    );
ELSE
    DECLARE @FileList TABLE 
    ( 
        LogicalName            NVARCHAR(128) NOT NULL 
        , PhysicalName         NVARCHAR(260) NOT NULL 
        , Type                 CHAR(1) NOT NULL 
        , FileGroupName        NVARCHAR(120) NULL 
        , Size                 NUMERIC(20, 0) NOT NULL 
        , MaxSize              NUMERIC(20, 0) NOT NULL 
        , FileId               BIGINT NULL 
        , CreateLSN            NUMERIC(25, 0) NULL 
        , DropLSN              NUMERIC(25, 0) NULL 
        , UniqueID             UNIQUEIDENTIFIER NULL 
        , ReadOnlyLSN          NUMERIC(25, 0) NULL 
        , ReadWriteLSN         NUMERIC(25, 0) NULL 
        , BackupSizeInBytes    BIGINT NULL 
        , SourceBlockSize      INT NULL 
        , FileGroupId          INT NULL 
        , LogGroupGUID         UNIQUEIDENTIFIER NULL 
        , DifferentialBaseLSN  NUMERIC(25, 0) NULL 
        , DifferentialBaseGUID UNIQUEIDENTIFIER NULL 
        , IsReadOnly           BIT NULL 
        , IsPresent            BIT NULL 
        , TDEThumbprint        VARBINARY(32) NULL
        , SnapshotURL          NVARCHAR(360) 
    );

这种方法的问题是@FileList声明了两次。

我无法使用ALTER TABLE,因为它不受支持。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

这是Pரதீப்

的一个很好的建议

或者您可以尝试使用TempTable

 DECLARE @product_major_version int;
SELECT @product_major_version = CAST(SERVERPROPERTY('ProductMajorVersion') AS int);

CREATE TABLE #FileList
    ( 
        LogicalName            NVARCHAR(128) NOT NULL 
        , PhysicalName         NVARCHAR(260) NOT NULL 
        , Type                 CHAR(1) NOT NULL 
        , FileGroupName        NVARCHAR(120) NULL 
        , Size                 NUMERIC(20, 0) NOT NULL 
        , MaxSize              NUMERIC(20, 0) NOT NULL 
        , FileId               BIGINT NULL 
        , CreateLSN            NUMERIC(25, 0) NULL 
        , DropLSN              NUMERIC(25, 0) NULL 
        , UniqueID             UNIQUEIDENTIFIER NULL 
        , ReadOnlyLSN          NUMERIC(25, 0) NULL 
        , ReadWriteLSN         NUMERIC(25, 0) NULL 
        , BackupSizeInBytes    BIGINT NULL 
        , SourceBlockSize      INT NULL 
        , FileGroupId          INT NULL 
        , LogGroupGUID         UNIQUEIDENTIFIER NULL 
        , DifferentialBaseLSN  NUMERIC(25, 0) NULL 
        , DifferentialBaseGUID UNIQUEIDENTIFIER NULL 
        , IsReadOnly           BIT NULL 
        , IsPresent            BIT NULL 
        , TDEThumbprint        VARBINARY(32) NULL  
    );

IF (@product_major_version <= 12)
BEGIN
    ALTER TABLE #FileList
    Add     SnapshotURL     NVARCHAR(360) 
END