sqlserver中的动态查询执行

sqlserver中的动态查询执行,sql,sql-server,dynamic-sql,Sql,Sql Server,Dynamic Sql,我创建了一个存储过程来备份多个文件中的任何数据库 这是我的存储过程: 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

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

这是我的存储过程:

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
我得到一个错误:

味精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
ALTER过程[dbo].[BackupJob]
(
--在此处添加存储过程的参数
@文件组NVARCHAR(1000),
@路径NVARCHAR(最大值),
@努菲尔国际酒店
)
作为
开始
将@SQLQuery声明为NVarChar(MAX)
将@SQLSubQuery声明为NVarChar(MAX)
声明@ParamDefinition为NVarChar(2000年)
声明@Err Int
声明@i Int
声明@Backup\u Name NVarChar(最大值)
声明@DB_Name NVarChar(最大值)
选择@DB_Name=DB_Name()
设置@i=1;
--在此处为过程选择语句
SET@SQLQuery=
备份数据库['+@DB_Name+']FILEGROUP=''+@FILEGROUP+'''TO'

虽然(@iTag您正在使用的dbms。该代码是特定于产品的。您可以在任何sql server DB上运行此SP,它将为该SP创建备份SP,以帮助它执行的所有动态sql发出
PRINT
语句。检查输出是否存在语法错误。什么愚蠢的错误我没有连接@SQLQuery并打印两次。非常感谢 ..
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