2017-02-09 74 views
0

我有一個條件,其中用戶將通過像逗號分隔值單引號在T-SQL

0071061386,0071061387 

它將被傳遞到一個變量,它饋送值到一個動態查詢與兩個單引號。

用戶

declare @s nvarchar(max) = '0071061386,0071061387' 

傳遞應該是這樣轉換的用戶值後使我可以通過這些值轉換爲動態查詢

declare @s nvarchar(max) = '''0071061386'',''0071061387''' 
+2

而不是繼續沿着這條路,你能不能安排用戶使用更合適的數據類型的數據傳遞給你,即一個*設計*來保存多個值,如表值參數或XML類型? –

+5

這是另一個[Bobby Tables](https://xkcd.com/327/)。你**不要**希望用戶通過CSV,你**不要**想要創建任何類型的動態查詢。如果要向查詢發送多個值,請使用表類型,或使用SqlBulkCopy批量插入行。 –

+1

因此,用戶輸入'1,1);拖放表格命令; - '。你的查詢很高興地把它傳遞給動態查詢,它看到一個*批*的語句,一個插入一條記錄,下一個刪除一個表。在drop語句之後的任何內容都會被忽略作爲註釋。 –

回答

1

一個簡單的替換爲可能在這裏做的伎倆,但我相信這是一個XYProblem。也許你最好解釋一下導致你走上這條道路的問題。

declare @s nvarchar(max) = '0071061386,0071061387' 

SELECT '''''' + REPLACE(@s, ',', ''''',''''') + '''''' 

結果:

''0071061386'',''0071061387'' 
+0

謝謝它的工作 DECLARE @T nvarchar(max)='0071061386,0071061387' - SELECT''''+替換(@S,',',''',''')+''''' DECLARE @U NVARCHAR(MAX)=(SELECT''''+替換(@T,',',',''')+'''') select @U – aman6496

+2

@AshishMandal Zohar已經提到過,這是一個答案,但你問的是錯誤的問題。 *爲什麼*你可以通過CSVs,當你可以傳遞一個值列表? –

0

試試這個

DECLARE @S NVARCHAR(MAX) = '0071061386,0071061387' 
    SELECT REPLACE(''''''''[email protected]+'''''''',',',''''',''''') 
+0

然後用戶輸入'1,1);刪除表格命令; - '。即使這回答了這個問題,用戶所問的是如何自己拍攝腳。 –

+0

謝謝你的工作 DECLARE @T nvarchar(max)='0071061386,0071061387' - SELECT''''+替換(@S,',',''',''')+''''' DECLARE @U NVARCHAR(MAX)=(SELECT''''+替換(@T,',',',''')+'''') select @U – aman6496

+0

@AshishMandal恭喜你,被摧殘。法律要一個字。 *解釋你的實際問題*,而不是你嘗試的破解而不是修復 –