使用 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? (我得到“登录失败”)
无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008