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