2011-03-04 22 views
5

使用動態IN子句爲什麼下面的SQL不取我什麼在MSSQL

DECLARE @Status AS VARCHAR(400) 
SET @status = '''Closed'',''OPEN''' 
select * from MYTABLE where status in(@status) 

雖然作爲 select * from MYTABLE where status in('Closed','Open')取我行

+2

我做了檢查,但他們均與LINQ。對不起,如果我錯過了任何,請給我指向類似的帖子 – rsapru 2011-03-04 10:41:21

+0

檢查此鏈接可能會有所幫助。嗯你是對的。看起來很難找到一個,但我相信有很多。無論如何有一個鏈接艱難 - http://stackoverflow.com/questions/2194120/formatting-a-string-for-a-sql-in-clause – 2011-03-04 10:54:45

回答

4

你可以,如果你想要做一些動態的SQL,但我認爲它不是真正的競爭力..

DECLARE @Status nVARCHAR(400), 
      @SQL nvarchar(500) 

SET @status = '''Closed'''+','+'''OPEN''' 
set @SQL = ' 
select * from [MYTABLE] where status in('[email protected] +')' 

exec sp_executesql @SQL 
GO 
+0

這對我有效..動態SQL對我來說很好。 – rsapru 2011-03-04 10:57:57

+1

如果是適用於web應用程序的代碼,則可以很好地幫助處理SQL注入動態SQL。 – bAN 2011-03-04 11:01:55

+0

在預問題搜索中找到此答案。謝謝! – nageeb 2011-07-05 03:28:11

4

你的第一個問題,檢查值'Closed','OPEN'存在於數據庫中。值不會擴大。

如果您使用SQL Server 2008或更高版本,則可以使用Table Valued Parameters來實現相同的目的。

+0

感謝您的解釋,永遠不知道。幫助我理解問題 – rsapru 2011-03-04 10:59:14