【问题标题】:SQL Server 2005 query uses ? which doesn't work in SQL Server 2012SQL Server 2005 查询使用?这在 SQL Server 2012 中不起作用
【发布时间】:2026-01-14 03:15:01
【问题描述】:

我正在开发一个查询 SQL Server 上实时数据的应用程序。用户在 '% %' 标记内输入名称以进行搜索。 IE。如果用户要搜索诸如 Noble 之类的财产的所有者,他们将输入 %noble%。

我们最近将应用程序和存储数据的 SQL Server 从 SQL Server 2005 升级到 SQL Server 2012。

现有查询和新查询相同:

SELECT aurtvalm.pcl_num 
FROM aurtvalm 
INNER JOIN rtpostal ON aurtvalm.ass_num = rtpostal.ass_num
WHERE rtpostal.fmt_nm2 LIKE ?

在旧版本中,上述查询产生 16 个结果。 2012 版本中完全相同的查询会产生错误:

'?' 附近的语法不正确

自 SQL Server 2005 以来,? 符号的使用是否发生了变化?

【问题讨论】:

  • 道歉 - 我第一次发帖。
  • 接受并删除了我的评论
  • 你确定有问号吗?可能该语句是从某些代码中复制的?我不记得这样的语法...
  • 是的,这绝对是一个问号。该应用程序以前在 SQL 2005 中使用了空间软件,也许这增加了额外的语法?问题已解决,应用程序的另一个组件声明了我需要的变量。原来 2005 年的旧版本没有这样做。
  • 甚至 SQL Server 2005 也总是使用 命名参数 - 而不是 ? 作为其参数 - 类似于 @searchterm 或类似的东西。 ?OleDbProvider 一起使用,主要用于访问 MS Access 和其他 OleDB 数据库

标签: sql-server sql-server-2005 sql-server-2012


【解决方案1】:

那是因为你的语法不正确。您必须使用参数而不是问号。比如:

SELECT aurtvalm.pcl_num 

FROM aurtvalm 
INNER JOIN rtpostal ON aurtvalm.ass_num = rtpostal.ass_num

WHERE rtpostal.fmt_nm2 like @param

【讨论】:

  • 这个组件是什么时候改变的?旧版本有效,但新版本无效,所以我假设它一定在某个时候发生了变化。另外,这是否需要我声明 @param 变量?
  • 感谢您的帮助 Stanislovas,您肯定让我走上了解决这个问题的正确轨道。