2012-10-24 90 views
0

我有一個ASP.NET網站(c#)和在代碼隱藏我想使用SQL http://www.w3schools.com/sql/sql_in.asp中的IN運算符從我的數據庫中獲取數據。SQL查詢與「IN」運算符的動態參數

的語法是:

SELECT column_name(s) 
FROM table_name 
WHERE column_name IN (value1,value2,...) 

我使用一個存儲過程來獲取數據,這個過程我跑裏面,到了最後,選擇。

我的問題是如何動態地構建查詢的(value1, value2, ...)的一部分?我如何發送SqlParameter(s)IN運營商中出現的值?

的存儲過程是這樣定義的:

CREATE PROCEDURE [dbo].[GetAllUsers] 
    @ORGANIZATION_ID int = null 
AS 
BEGIN 
    SET NOCOUNT ON; 

    begin 
     SELECT * 
     from USERS 
     where ORGANIZATION_ID = @ORGANIZATION_ID 
    end 
END 

我想的東西,如更換WHERE條款:

WHERE ORGANIZATION in (xxxxxxxxxxxxx) 

如何做到這一點?

謝謝。

+0

你在使用什麼DBMS(SQLServer/MySQL/Oracle)? – Vikdor

+0

我有sqlServer。 –

回答

1

您可以使用動態SQL:

CREATE PROCEDURE [dbo].[GetAllUsers] 
    @ORGANIZATION_ID varchar(max) = null 
AS 
BEGIN 
    declare @sql varchar(max) 
    @sql = 'SELECT * 
      from USERS 
      where ORGANIZATION_ID in ('[email protected]_ID+')' 
    SET NOCOUNT ON; 
     begin 
      exec(@sql) 
     end 
END 

你必須改變的@ORGANIZATION_ID類型爲varchar,並運行程序

一個ID:

exec '1' 

或ID列表:

exec '1,2,3,4' 
+0

謝謝。我應該使用ORGANIZATION_ID varchar(max)還是ORGANIZATION_ID varchar(10000)。 –

+0

@Zelter安以軒當你需要:) – Parado

+0

它是不好的做法,這樣做的,但是 – Sklivvz