2017-06-08 16 views
0

以下のコードで問題が発生しています。私は、バッチにしようとしている私は取得していますエラーがあるSQL Serverのすべてのテーブルをバッチ圧縮

USE backups 
GO 

DECLARE @tables TABLE (TABLE_NAME VARCHAR(MAX)) 

INSERT INTO @tables (TABLE_NAME) SELECT DISTINCT TABLE_NAME FROM information_schema.TABLES 

WHILE (SELECT COUNT(*) ct FROM @tables) > 0 
BEGIN 
    DECLARE @table VARCHAR(MAX) = (SELECT TOP 1 TABLE_NAME FROM @tables) 

    DELETE FROM @tables WHERE TABLE_NAME = @table 

    BEGIN TRY 
     ALTER TABLE @table REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE) 
    END TRY 
    BEGIN CATCH 
     RAISERROR('Compression failed for backup table : %s', 20, 101, @table) WITH LOG 
    END CATCH 
END 

...特定のデータベース内のすべてのテーブルを圧縮するが、私の構文に問題があります:

「付近に不適切な構文@表'。 ID、またはQUOTED_IDを期待する

答えて

0

私は、テーブルや他のスキーマオブジェクトに変数名を使用できないことが判明しました。これは問題を解決します...

USE backups 
GO 

DECLARE @tables TABLE (TABLE_NAME NVARCHAR(MAX)) 
DECLARE @query NVARCHAR(MAX) 

INSERT INTO @tables (TABLE_NAME) SELECT DISTINCT TABLE_NAME FROM information_schema.TABLES 

WHILE (SELECT COUNT(*) ct FROM @tables) > 0 
BEGIN 
    DECLARE @table VARCHAR(MAX) = (SELECT TOP 1 TABLE_NAME FROM @tables) 

    DELETE FROM @tables WHERE TABLE_NAME = @table 

    BEGIN TRY 
     SET @query = N'ALTER TABLE ' + @table + N' REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)' 

     EXEC sp_executesql @query 
    END TRY 
    BEGIN CATCH 
     RAISERROR('Compression failed for backup table : %s', 20, 101, @table) WITH LOG 
    END CATCH 
END 
関連する問題