在 SQLOLEDB 和 MSDASQL 中执行 SQL 的区别

Difference by executing SQL in SQLOLEDB and MSDASQL

我对以下 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 时,一切正常,备份文件正在创建。

MSDA 中的相同命令SQL 不会崩溃,甚至不会创建备份文件。

有人可以解释一下,为什么相同的命令适用于 SQLOLEDB 而不适用于 MSDASQL? 这两个Provider具体有什么区别?

已解决问题。

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