在SQLOLEDB和MSDASQL

时间:2015-09-01 10:05:26

标签: sql-server tsql database-connection oledb

我遇到以下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? 这两家提供商之间的具体差异是什么?

1 个答案:

答案 0 :(得分:0)

解决了问题。

OLEDB通过ADO一直存在DONE_IN_PROC消息(受影响的行)混淆不期望它们的代码的问题。没有更改应用程序代码的解决方法是将SET NOCOUNT ON指定为批处理中的第一个语句。