列名=%列名%SQL

列名=%列名%SQL

问题描述:

我们有一个类,它用实际的HashMap值替换SQL参数。例如,select * from x where date =%processingDate%将替换processingDate的值,然后检索相应的记录。但是,当参数名称与列的名称相同时,它似乎不会进行替换;例如,select * from x where date =%date%不会替换日期,然后检索所有记录,因为它的行为类似于始终为真的布尔值。这是预期的SQL行为吗?列名=%列名%SQL

感谢您的帮助。

给定的日期是T-SQL中的保留关键字我会推荐用[]来包装列来限定列。

链接列表保留kewords https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql

你在你的问题中提到的SQL Paramater的。我希望你的参数看起来像@date,如果它是一个SQL参数。如果它没有@前缀,则查询可能正在评估列而不是您期望的参数。

我相信这样的事情会为你工作:

--Assuming @date被评价为一个字符串 SELECT * FROM X WHERE [日期] LIKE '%' + @date +“% '

--Evaluates特定值 SELECT * (像和=运营商之间的差异的研究)从X WHERE [日期] = @date

+0

日期是一个坏的例子。这其实是我们案件中完全不同的东西,绝对不是保留字。具体而言,如果y是表x中的列,y =%y%将返回所有记录,这是我们正在调试的情况。 –

+0

我想这对于您已经实现了'替换'功能的编程语言来说更是一个问题。 –

+1

我建议在计划文件或目录视图中查看生成的sql –