繁体   English   中英

SQL Server中的动态查询执行

[英]Dynamic query execution in SQL Server

我创建了一个存储过程来备份多个文件中的任何数据库。

这是我的存储过程:

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 ['+@DB_Name+'] FILEGROUP = '''+@FileGroup+''' 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 =@SQLSubQuery + ','
        END

        SET @i = @i + 1
    END

    SET @SQLQuery =  @SQLSubQuery + ' WITH CHECKSUM'

    PRINT (@SQLQuery)
    EXECUTE (@SQLQuery)

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

如果我打印并执行存储过程,则可以正常工作,但是如果我执行如下存储过程:

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

我收到一个错误:

Msg 102,第15级,状态1,第1行
'='附近的语法不正确。

有什么建议吗?

谢谢

再试一遍:

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 ['+@DB_Name+'] FILEGROUP = '''+@FileGroup+''' TO  '

    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 =@SQLSubQuery + ','
        END
    SET @i = @i + 1
    END

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM