2017-01-26 98 views
0

我的查詢低於:如何在SQL中轉義單引號?

DECLARE @QueryText as NVARCHAR(MAX); 

SET @QueryText= 'select '"' + m.MACHINE_STREET + '"' AS MACHINE_LOCATION 
       from tblMachine m 
       where m.Site= ''TSN''' 

EXEC sp_Machine_Location,NULL,NULL,NULL,@QueryText 

我借他們加倍逃過TSN單引號。但我不知道如何在MACHINE_STREET中實現,因爲我在報價單中選取整個機器街道,否則在導出到Excel時會中斷。

+0

您將字符串中的報價加倍。所以,'''''是包含一個單引號的字符串。 –

+0

警告:這通常是sql注入漏洞的徵兆。 –

+0

'''''+ m.MACHINE_STREET +''「''AS MACHINE_LOCATION無法正常工作 – LT268

回答

0

您需要用雙引號將雙引號括起來,以便在雙引號之間獲得 MACHINE_STREET中的數據。

DECLARE @QueryText AS NVARCHAR(MAX); 

SET @QueryText= 'select ''"''+m.MACHINE_STREET+''"'' AS MACHINE_LOCATION 
from tblMachine m where m.Site=''TSN''' 

而且我看不出有任何需要動態查詢在這裏你可以做到這一點

SELECT '"' + m.MACHINE_STREET + '"' AS MACHINE_LOCATION 
FROM tblMachine m 
WHERE m.Site = 'TSN' 
+0

這不起作用 – LT268

+0

@ LT268,您會得到什麼錯誤?生成的SQL代碼是正確的,所以在被調用的proc中可能存在一個問題? –

+0

該作業正在完成而未提取任何結果。如果我從查詢中刪除這個字段,並在沒有任何轉義字符串的情況下傳遞另一個字段,它將成功調用store store並返回結果。所以我不認爲任何問題與商店親。 – LT268

0

看看sp_executesql

此過程允許您將sql命令的參數數據單獨傳遞給它,以便您可以免受SQL注入攻擊。

+0

有沒有任何輸入動態地傳遞給該查詢如何假設sql注入的可能性 –

+0

「m.MACHINE_STREET」列中的值來自某處。 –

+0

這是來自'tblMachine'表的一列,而如果在'MACHINE_STREET'列中有一個逗號,那麼它會導出爲ex​​cel,它可能會破壞excel格式。所以OP想在'MACHINE_STREET'列的數據周圍追加'「 –

相關問題