2017-09-27 11 views
0

ローカルテーブルの条件付きカラムを宣言するための適切な解決法が見つからないようです。DECLARE @Localテーブルの条件付きカラム

2番目の表には、追加の列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が2回宣言されていることです。

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

これはまた動作します:) –

関連する問題