我遇到以下SQL字符串的问题:
DECLARE @s varchar(1000), @ver nvarchar(128)
SET @ver = Server Version (e.g. 11 for SQL Server 2012)
SELECT @s = case
WHEN
(CheckVersion (e.g. Enterprise)) AND @ver > 9
THEN
'BACKUP DATABASE [DB] TO DISK = ''C:\Backup\DBBackup.bak'' WITH COMPRESSION, NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10'
ELSE
'BACKUP DATABASE [DB] TO DISK = ''C:\Backup\DBBackup.bak'' WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10;'
END
EXEC (@s)
(这是短版本,我知道这不起作用)
当我使用SQLOLEDB Provider时,一切正常,Backupfiles就会被创建。
MSDASQL中的相同命令不会崩溃,但甚至不会创建备份文件。
有人可以解释一下,为什么同样的命令适用于SQLOLEDB而不适用于MSDASQL? 这两家提供商之间的具体差异是什么?
答案 0 :(得分:0)
解决了问题。
OLEDB通过ADO一直存在DONE_IN_PROC消息(受影响的行)混淆不期望它们的代码的问题。没有更改应用程序代码的解决方法是将SET NOCOUNT ON指定为批处理中的第一个语句。