使用 ODBC 连接到 SQL SERVER 时,s-s-rS 错误必须声明标量变量

Posted

技术标签:

【中文标题】使用 ODBC 连接到 SQL SERVER 时,s-s-rS 错误必须声明标量变量【英文标题】:s-s-rS error must declare scalar variable when using ODBC connection to SQL SERVER 【发布时间】:2015-11-20 14:56:04 【问题描述】:

我有一个 s-s-rS 数据集查询,其中包含一个名为 BENEFIT 的单值参数。我的数据源是 SQL SERVER 2014:以下查询给出错误“错误 [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]必须声明标量变量“@BENEFIT”。

SELECT  c.BENEFIT  FROM  CLAIM AS c
WHERE c.DOWNLOAD_DATE > '20150701' AND c.BENEFIT = (@ BENEFIT)

该错误仅在使用 ODBC 连接时存在,并使用直接连接消失。如果没有参数,查询将使用任一连接方法正确解析。

任何想法表示赞赏。

谢谢, 阿拉斯代尔

【问题讨论】:

【参考方案1】:

ODBC 不支持命名参数,请尝试将参数名称更改为?

SELECT c.BENEFIT FROM CLAIM AS c WHERE c.DOWNLOAD_DATE > '20150701' AND c.BENEFIT = ?

更多信息在这里:https://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.90).aspx

请注意“通过 OleDbCommand 或 OdbcCommand 使用参数”部分。

【讨论】:

嗨 iDrian - 这是一个 s-s-rS 数据集查询。我更新了我的文字以更清晰! @Holdfast4 我明白,但我的回答仍然有效。来自任何来源的 ODBC 连接不支持命名参数。请尝试我上面推荐的方法。 谢谢这确实有效。我会避免使用 ODBC。有趣的是,水晶报表将解析和替换命令对象(数据集)中的命名参数。看来 s-s-rS 在这方面还不够发达。【参考方案2】:

SET NOCOUNT ON 在查询之前,然后在查询之后 SET NOCOUNT OFF 如果您在查询中声明变量。如果变量在查询之外声明,则使用 ?,如 PicoDeGallo 所述。

【讨论】:

不起作用。您无法摆脱 ODBC 驱动程序的限制。与代码或查询无关

以上是关于使用 ODBC 连接到 SQL SERVER 时,s-s-rS 错误必须声明标量变量的主要内容,如果未能解决你的问题,请参考以下文章

不使用 ODBC 将 Python 连接到 SQL Server

通过 ODBC 连接连接到 Sql Server CE

如何使用ODBC数据连接连接到本地SQL Server? (我得到“登录失败”)

无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008

通过 ODBC 连接到 SQL Server 的 Access 中的 MS SQL 查询

ODBC无法连接SQL SERVER