2011-06-30 11 views
0

SQLクエリで複数回渡す文字列のリストがあります。文字列をSQLクエリに渡すと宣言する

私はそれらを一度宣言してから、そのリストをクエリに渡したいと思います。これは可能ですか?

値:クエリの

'1-PGB4Z', '1-PGAT6', '1-PGB55', '1-PGB52', 
'1-2SS1E6', '1-2SS1E3', '1-2RZQMZ', '1-2RZQNF', '1-2RZQMT', '1-2SACTZ', 
'1-2S0GNR', '1-2S0GLP', '1-2S0GCN', '1-1VOMUX', '1-1VOMV0', '1-1VOMV3', 
'1-1VOX7Z', '1-1VOX82', '1-1VOMV7', '1-1VOMVA', '1-1VOMVD', '1-1VOMVG', 
'1-1VPMBV', '1-1VPMBY', '1-1VPMC4', '1-1VO9XD', '1-1VO9XG', '1-1VO9XJ', 
'1-1VPMBY', '1-1VO9XJ', '1-1VO9XM', '1-1VO9Z6', '1-16PGRE', 
'1-16PGRK', '1-16PGRH', '1-8MNWB', '1-9JAVH', '1-8ISTX', '1-N5KYK', 
'1-KZMMH', '1-D7KG9', '1-9HCNP', '1-9H81K', '1-1C9F1P', '1-QBQQW', 
'1-2S0F1P', '1-2S0F45', '1-2S17LK', '1-2S17LT', '1-2SL5D9', '1-2SDUQD' 

一部:

select * from table1 t3 
where 
and t1.cse_id in 
(select d.cse_id 
from table1 d 
where d.cse_employee_number in 
(select substr(t2.emp_s3_id, 3,8) from table2 t2, table 3 T1 
where t2.fk_resource_group_id = t1.resource_group_id 
and t1.resource_group_id in (
'1-PGB4Z', '1-PGAT6', '1-PGB55', '1-PGB52', 
'1-2SS1E6', '1-2SS1E3', '1-2RZQMZ', '1-2RZQNF', '1-2RZQMT', '1-2SACTZ', 
'1-2S0GNR', '1-2S0GLP', '1-2S0GCN', '1-1VOMUX', '1-1VOMV0', '1-1VOMV3', 
'1-1VOX7Z', '1-1VOX82', '1-1VOMV7', '1-1VOMVA', '1-1VOMVD', '1-1VOMVG', 
'1-1VPMBV', '1-1VPMBY', '1-1VPMC4', '1-1VO9XD', '1-1VO9XG', '1-1VO9XJ', 
'1-1VPMBY', '1-1VO9XJ', '1-1VO9XM', '1-1VO9Z6', '1-16PGRE', 
'1-16PGRK', '1-16PGRH', '1-8MNWB', '1-9JAVH', '1-8ISTX', '1-N5KYK', 
'1-KZMMH', '1-D7KG9', '1-9HCNP', '1-9H81K', '1-1C9F1P', '1-QBQQW', 
'1-2S0F1P', '1-2S0F45', '1-2S17LK', '1-2S17LT', '1-2SL5D9', '1-2SDUQD', 
'1-2SDUTD', '1-2FRRMN', '1-2GHUNX', '1-2FXDD6', '1-2FWFG1', '1-2FR8CR', 
'1-2FWFLM', '1-2FH7YL', '1-2FRRMX', '1-2GDIE3', '1-2FWFQI', '1-2FWFNL', 
'1-2U9ULR', '1-2U4ZZP', '1-2SC2WF', '1-2SXPKJ', '1-2TDSJ5') 
+0

ストアドプロシージャに渡しますか? – Magnus

答えて

1

ルックアップ 'テーブルでこれらの値を保存し、クエリ内の条件としてこれを使用する方が良いでしょう。値が変更された場合は、それらを使用するストアドプロシージャを更新する必要がありません。例えば

select * from table1 t3 
where 
and t1.cse_id in 
(select d.cse_id 
from table1 d 
where d.cse_employee_number in 
(select substr(t2.emp_s3_id, 3,8) from table2 t2, table 3 T1 
where t2.fk_resource_group_id = t1.resource_group_id 
and t1.resource_group_id in (SELECT value from lookup table) 

は、私の知る限り、直接配列である変数を作成する方法はありませんが、あなたがに他の機能で使用することができますVARCHARの変数を作成することができます配列の検索をシミュレートします。しかし、これはこれは、「永久」の値で彼らと表を記入し、それを

+0

+1 - SQL Serverの場合、彼は好きならば、proc本体のテーブル変数も実行できます。 – JNK

+1

SQL Serverでは、基本的に 'DECLARE @TableVar TABLE(Field1、Field2)'というテーブル変数を実行し、通常のテーブルのように挿入することができます。 – JNK

+0

@JNK Trueですが、複数のSP内でこれを使用していて、値を変更する必要がある場合は、おそらくルックアップテーブルが適しています。有効なポイントとifが1つの場所でのみ使用されるかどうかを検討するもの。 – ChrisBint

0

内で直接動作しません。 )ステートメント(動作しません)。 一時テーブルは唯一の解決策です。

0

に参加する場合は、カンマ区切り値を定義し、IN(としてそれらを使用することはできませんIN声明

0

ウェイ1:
ChrisBintが正しいです。代わりに(val1、val2、val3)を使用することができます(SELECT val FROM vals_tbl)、vals_tblにvalを格納します。
これが良い方法です。

方法2:今すぐ

CREATE PROCEDURE exe_str(command TINYTEXT)/*exec the string*/ 
BEGIN 
    PREPARE stmt1 FROM command; 
    EXECUTE stmt1; 
    DEALLOCATE PREPARE stmt1; 
END 

は、あなたがSELECT文の文字列を作成し、それを実行することができます。

SET @str1="SELECT ........."; 
SET @str2="'1-PGB4Z', '1-PGAT6'........"; 
SET @str3=");"; 
CALL exe_str(CONCAT(@str1,@str2,str3)); 

私は最初の方法を推奨しています。

関連する問題