2012-06-15 121 views
1

我有我的存储过程中的查询:格式字符串时使用存储过程在SQL Server 2005

IF @backup = 0 
    BEGIN 
     SELECT sql = 'BACKUP DATABASE MyDatabase TO DISK="'[email protected]+'"'; 
    END 

@filenvarchar(MAX)backupint

如果我执行,如存储过程:

DECLARE @return_value int 

EXEC @return_value = [dbo].[usp_cp_backup_restore_db] 
     @backup = 0, 
     @file = N'C:\backupFiles\MyDatabase.bak' 

但结果变成: BACKUP DATABASE ContentPlatform TO DISK="C:\backupFiles\MyDatabase.bak"

我希望出现BACKUP DATABASE ContentPlatform TO DISK='C:\backupFiles\MyDatabase.bak' 因为正确的格式是

BACKUP 
DATABASE MyDatabase TO 
DISK='C:\MyDatabase.bak' 

因此与http://dwhanalytics.wordpress.com/2011/03/15/sql-serverexclusive-access-could-not-be-obtained-because-the-database-is-in-usethe-tail-of-the-log-for-the-database-has-not-been-backed-up/

有什么建议吗?

感谢

回答

3

而是在初始字符串中使用"的,使用''代替。 SQL知道,如果你放两个'彼此相邻,你的意思'出现的字符串中(而不是结束一个字符串,开始另一个。)

SELECT sql = 'BACKUP DATABASE MyDatabase TO DISK='''[email protected]+''''; 

这看起来很奇怪,肯定的,但有用。

2
SELECT sql = 'BACKUP DATABASE MyDatabase TO DISK='''[email protected]+'''' 
+0

然后将成为'BACKUP DATABASE Con​​tentPlatform TO DISK = @文件' –

+0

这是错误的。你不能只用'''把''放在字符串中。这将终止字符串。你需要''''而不是*(对于你想要的字符串中的每个''')*。 – MatBailie

+0

修复缺少' –

相关问题