2017-09-27 33 views
0

我似乎無法找到一個適當的解決方案來聲明本地表中的條件列。DECLARE @Local中的條件列TABLE

第二個表格有一個額外的列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,因爲它不被支持。

我該如何解決這個問題?

+8

刪除'if'條件並一直添加'SnapshotURL'列。這會比你想要的要好得多 –

+0

這使我走上了正確的道路。很明顯,我需要做的就是讓'SnapshotURL'爲空 –

回答

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  
+0

這也可以工作:) –