私のストアドプロシージャでは、ユーザー入力に基づいて選択する必要があります
クエリは次のようになります
SELECT A,B FROM MYTABLE WHERE B=array[0] OR B=array[1] OR B=array[2]
配列内のアイテムの数は私にはわかりません。ユーザーの選択によって、配列内の要素の数が決まります。
どうすればこれを達成できますか?これができれば、配列内の各要素に対して同じ手順を使用することを避けることができます。
私のストアドプロシージャでは、ユーザー入力に基づいて選択する必要があります
クエリは次のようになります
SELECT A,B FROM MYTABLE WHERE B=array[0] OR B=array[1] OR B=array[2]
配列内のアイテムの数は私にはわかりません。ユーザーの選択によって、配列内の要素の数が決まります。
どうすればこれを達成できますか?これができれば、配列内の各要素に対して同じ手順を使用することを避けることができます。
配列の代わりに、ユーザー定義テーブル型を作成できます
CREATE TYPE dbo.type_name AS TABLE
(
column1 INT NOT NULL
)
ページから単一の列DataTable
をパラメーターとして渡します (値はその配列と同じです) 。
そして手順では、次のように使用できます
CREATE PROCEDURE proc_name
@array dbo.type_name READONLY
AS
SELECT A,B FROM MYTABLE WHERE B IN (select column1 from @array)
Use Table-Valued Parameters (Database Engine) をご覧ください。
テーブル値パラメーターは、ユーザー定義のテーブル型を使用して宣言されます。テーブル値パラメーターを使用すると、一時テーブルや多数のパラメーターを作成することなく、複数行のデータを Transact-SQL ステートメントまたはルーチン (ストアド プロシージャや関数など) に送信できます。
さらに、それを XML パラメーターとして渡し、それを SP のテーブルに変換することもできます。SQL Server での XML の使用
区切られた文字列を渡して、それをテーブルに分割することもできます 文字列を正しい方法で分割する – または次善の方法
Please, get comma seprated string from array, is like that "12,23,25,256". Finally execute
as per below :
where @array_string is parameter of string of array:
SELECT A,B FROM MYTABLE WHERE B in(@array_string);
これを試して
配列の代わりにカンマ区切りの文字列を送信
DECLARE @array0 VARCHAR(MAX)
--Commaseprated string array0
DECLARE @tmpArray0 TABLE ( value1 VARCHAR(500) )
--table for Commaseprated string array0
WHILE CHARINDEX(',', @tmpArray0) > 0
BEGIN
INSERT INTO @tmpArray1
SELECT SUBSTRING(@array0, 1, ( CHARINDEX(',', @array0) - 1 ))
SET @array0 = SUBSTRING(@array0, CHARINDEX(',', @array0) + 1,
LEN(@array0))
END
DECLARE @array1 VARCHAR(MAX)
--Commaseprated string array1
DECLARE @tmpArray1 TABLE ( value1 VARCHAR(500) )
--table for Commaseprated string array1
WHILE CHARINDEX(',', @array1) > 0
BEGIN
INSERT INTO @tmpArray1
SELECT SUBSTRING(@array1, 1, ( CHARINDEX(',', @array1) - 1 ))
SET @array1 = SUBSTRING(@array1, CHARINDEX(',', @array1) + 1,
LEN(@array1))
END
DECLARE @array2 VARCHAR(MAX)
--Commaseprated string array2
DECLARE @tmpArray2 TABLE ( value1 VARCHAR(500) )
--table for Commaseprated string array2
WHILE CHARINDEX(',', @array2) > 0
BEGIN
INSERT INTO @tmpArray2
SELECT SUBSTRING(@array2, 1, ( CHARINDEX(',', @array2) - 1 ))
SET @array2 = SUBSTRING(@array2, CHARINDEX(',', @array2) + 1,
LEN(@array2))
END
SELECT A ,
B
FROM MYTABLE
WHERE B IN ( SELECT value1
FROM @tmpArray0 AS ta )
OR B IN ( SELECT value1
FROM @tmpArray1 AS ta )
OR B IN ( SELECT value1
FROM @tmpArray2 AS ta )