2017-06-22 11 views
0

SQL Server 2014データベースのインデックスを再構築し統計情報を更新するために使用する小さなスクリプトがあります。
MSSMで実行するとうまく動作するので、毎晩実行するジョブに入れたいと思っていました。tsqlはMSSMでうまく動作しますが、ジョブに入れると失敗します

私は仕事を作成するには、このリンクを使用:
how to schedule a job for sql query to run daily?

、これはステップ1で私のスクリプトです:

declare @command nvarchar(1000) 
DECLARE @TableName varchar(255) 
DECLARE TableCursor CURSOR FOR 
    SELECT table_name 
    FROM information_schema.tables 
    WHERE table_type = 'base table' 

OPEN TableCursor 
FETCH NEXT FROM TableCursor INTO @TableName 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @command = 'alter index all on ' + @TableName + ' rebuild' 
    exec sp_executesql @command 
    set @command = 'update statistics ' + @TableName 
    exec sp_executesql @command 

    FETCH NEXT FROM TableCursor INTO @TableName 
END 
CLOSE TableCursor 
DEALLOCATE TableCursor 

と、これはステップ2で私のスクリプトです:

insert into tblLog values (getdate(), 0, 'sql agent job rebuild index', 'indexes rebuild') 

私がStart Job at Stepを試しても、ステップ1の履歴にこのメッセージが表示されない場合は、

NT SERVICE \ SQLAgent $ GTT_192として実行されます。次のSETオプションの設定が正しくないため、 'QUOTED_IDENTIFIER'が原因で、ALTER INDEXがエラー に失敗しました。 SETオプションが、 インデックス付きビューおよび/または計算列のインデックス、および/またはフィルタリングされた インデックスおよび/またはクエリデータ型メソッド、および/または 空間インデックス操作で使用するのに適切であることを確認します。 [SQLSTATE 42000](エラー1934)。手順 が失敗しました。

私はこの設定QUOTED_IDENTIFIERの由来を知りません。

MSSMではなくジョブで実行すると、なぜ動作しますか?
さらに重要なのは、それを稼働させるために何ができるのでしょうか?

答えて

1

初めにスクリプトに追加します。

SET QUOTED_IDENTIFIER ON 
+0

をシンプルかつそれが感謝を働いたこと – GuidoG

関連する問題