2012-06-28 71 views
1

我想獲得一個「在哪裏」使用sql中的參數工作。SQL在哪裏使用參數

SELECT * FROM tablename WHERE(name IN (@names)) 

因此,我在sqlmanager中執行SQL,並在@name值中輸入'Name1','Name2',當我得到它的要求時。這樣,查詢返回0行。但是,如果我將SQL更改爲:

SELECT * FROM tablename WHERE(name IN ('Name1','Name2')) 

它有效。

使它工作的訣竅是什麼?

這篇文章解決了這個問題對我來說:Link to post感謝所有的答覆:)

+2

快速測驗 - 名稱*,如果你通過一個單一的任何*編程語言參數,它會檢查該參數的內部,發現逗號,分割逗號,然後處理所有內容,就好像提供了多個參數一樣? –

回答

0

請試試這個..

Declare @names varchar(150) 
Set @names = '''Name1'',''Name2''' 
Declare @str varchar(max) 
set @str = 'SELECT * FROM tablename WHERE(name IN ('[email protected]+'))' 
Execute(@str) 
+0

如果名稱列表包含[Bobby Tables](http://xkcd.com/327/) –

+0

,那麼這很容易受SQL注入的攻擊,因爲這裏@names是Sql存儲過程中的參數,所以Sql注入是不可能的。 –

+1

僅僅因爲'@ names'是一個參數,如果你通過字符串連接構造一個非參數化的動態SQL查詢並執行它,它不會奇蹟般地保護你免受SQL注入攻擊。 –