2017-05-26 73 views
0

我們有一個類,它用實際的HashMap值替換SQL參數。例如,select * from x where date =%processingDate%將替換processingDate的值,然後檢索相應的記錄。但是,當參數名稱與列的名稱相同時,它似乎不會進行替換;例如,select * from x where date =%date%不會替換日期,然後檢索所有記錄,因爲它的行爲類似於始終爲真的布爾值。這是預期的SQL行爲嗎?列名=%列名%SQL

感謝您的幫助。

回答

0

給定的日期是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 –