2017-07-21 21 views
0

データベースのバックアップを複数のファイルに保存するストアドプロシージャを作成しました。SQL Serverでの動的クエリの実行

これは私のストアドプロシージャです:私が得る

exec [BackupJob] 'PRIMARY', 'E:\trybackup',2 

:私は、ストアドプロシージャを印刷し、それを実行した場合

ALTER PROCEDURE [dbo].[BackupJob] 
(
    @FileGroup  NVARCHAR(1000), 
    @Path NVARCHAR(MAX), 
    @NoOfFile INT 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @SQLQuery AS NVarChar(MAX) 
    DECLARE @SQLSubQuery AS NVarChar(MAX) 
    DECLARE @ParamDefintion AS NVarChar(2000) 
    DECLARE @Err Int 
    DECLARE @i Int 
    DECLARE @Backup_Name NVarChar(max) 
    DECLARE @DB_Name NVarChar(max) 

    SELECT @DB_Name = DB_NAME() 
    SET @i=1; 

    -- SELECT statements for procedure here 
    SET @SQLQuery = ' 
    BACKUP DATABASE ['[email protected]_Name+'] FILEGROUP = '''[email protected]+''' TO ' 

    PRINT (@SQLQuery) 

    WHILE (@i <= @NoOfFile) 
    BEGIN 
     SELECT @Backup_Name = @Path + '\'+ DB_NAME()+ '_' + @FileGroup +'_' + CONVERT(VARCHAR(10), GETDATE(), 112)+ '_' + CONVERT(nvarchar,@i)+'.bak' 

     SET @SQLSubQuery =ISNULL(@SQLSubQuery,'') + ' DISK = '''+ @Backup_Name + '''' 

     IF(@i<@NoOfFile) 
     BEGIN 
      SET @SQLSubQuery [email protected] + ',' 
     END 

     SET @i = @i + 1 
    END 

    SET @SQLQuery = @SQLSubQuery + ' WITH CHECKSUM' 

    PRINT (@SQLQuery) 
    EXECUTE (@SQLQuery) 

    SET @Err = @@Error 
    RETURN (@Err) 
END 

、それがうまく動作しますが、私はこのようなストアドプロシージャを実行した場合エラー:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '='.

これに関するお勧めはありますか?

おかげ

+0

タグを使用しているDBMS。そのコードは製品固有です。 – jarlh

+0

このSPを任意のSQL Serverデータベースで実行すると、そのデータベースのバックアップが作成されます – Dilip

+0

SPは、実行するすべての動的SQLに対して有用な 'PRINT'ステートメントを発行します。構文エラーの出力を確認してください。 –

答えて

0

は再びそれを試してみてください。

ALTER PROCEDURE [dbo].[BackupJob] 
(
    -- Add the parameters for the stored procedure here 
    @FileGroup  NVARCHAR(1000), 
    @Path NVARCHAR(MAX), 
    @NoOfFile INT 
) 
AS 
BEGIN 
    DECLARE @SQLQuery AS NVarChar(MAX) 
    DECLARE @SQLSubQuery AS NVarChar(MAX) 
    DECLARE @ParamDefintion AS NVarChar(2000) 
    DECLARE @Err Int 
    DECLARE @i Int 
    DECLARE @Backup_Name NVarChar(max) 
    DECLARE @DB_Name NVarChar(max) 


    SELECT @DB_Name = DB_NAME() 
    SET @i=1; 

    -- SELECT statements for procedure here 
    SET @SQLQuery = ' 
    BACKUP DATABASE ['[email protected]_Name+'] FILEGROUP = '''[email protected]+''' TO ' 

    While(@i<[email protected]) 
    BEGIN 
     SELECT @Backup_Name = @Path + '\'+ DB_NAME()+ '_' + @FileGroup +'_' + CONVERT(VARCHAR(10), GETDATE(), 112)+ '_' + CONVERT(nvarchar,@i)+'.bak' 

     SET @SQLSubQuery =ISNULL(@SQLSubQuery,'') + ' DISK = '''+ @Backup_Name + '''' 

     IF(@i<@NoOfFile) 
     BEGIN 
     SET @SQLSubQuery [email protected] + ',' 
     END 
    SET @i = @i + 1 
    END 

    SET @SQLQuery = @SQLQuery + @SQLSubQuery + ' WITH CHECKSUM' 
    print(@SQLQuery) 
    exec (@SQLQuery) 

    SET @Err = @@ERROR 
    RETURN (@Err) 
    END 
+0

私は@SQLQueryを連結せずに2回印刷したのですか?どうもありがとう .. – Dilip

関連する問題