2016-11-02 15 views
0

私はこれに対するいくつかの回答を高く評価していますが、この種の操作をSQLで実行することに関するドキュメントは見つかりませんでした。基本的に、私は1つのクエリを実行するには大きすぎるパラメータリストを持っているので、私の最初の考えは、このパラメータのリストを分割し、パラメータリストのサブセットを取る単一のSQLスクリプトを作成し、すべての結果を1つのテーブルに追加します。複数のテーブルクエリの結果の追加

最初のクエリが返すすなわち、...

- id | DeviceName 
- 00 201341 
- 01 324232 
- ... ... 

秒1は...

- id | DeviceName 
- 02 253242 
- 03 234234 
- ... ... 

を返し、目標はすべてのこれらの結果は、1つの大きなテーブルに統合/追加することですその中のすべての値を持っています。

同じスクリプト内でSQLでこれを行うことはできますか?私はこのようなMSDNの記事を見つけましたが、これが本当に達成しようとしているのかどうかは分かりません。 https://msdn.microsoft.com/en-us/library/ethytz2x.aspx

私もstackoverflowの周りを検索しようとしましたが、私は全く同じ問題のように聞こえるものは見つけられませんでした。

私はSQLのエキスパートではないので、参加や組合の仕組みが分からないことがありますか?私はそれらを使って、異なる列の情報を1つのテーブルに結合しましたが、行を追加するのはそれほどではありませんでした。

編集: は私が扱ってるかのより具体的な例を与えるために、これは基本的に私はあまりにも多くのパラメータを避けるために変更しようとしているスクリプトです...

<sql-query name="GetMyDogsStatus"> 
    <query-param name="DogIds" type="Guid"/> 
    <return-scalar column="status" type="Guid"/> 
    <![CDATA[ 
    DECLARE @DogIds dbo.EntityIds 
    INSERT INTO @DogIds (dogID) 
    SELECT dogID from Dogs 
    WHERE dogID in (:DogIds) 
    DECLARE @tempId uniqueidentifier 
    DECLARE @dogStatus varchar(255) 
    DECLARE @InjuredDogIds dbo.EntityIds 
    DECLARE cur CURSOR FOR 
    SELECT dogId from @DogIds 
    OPEN cur 
    FETCH next from cur 
    INTO @tempId 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
    SELECT @dogStatus = null 
    SELECT TOP 1 @dogStatus = ev.[Delete Status] 
    FROM EventsHistory ev 
    WHERE dogId = @tempId 
      AND ev.[Delete Status] IS NOT NULL 
      AND ev.[Delete Status] != '' 
      AND ev.[Delete Status] != 'Pending' 
    ORDER BY [Time Deleted] DESC 
    if(@dogStatus is not null and not (@dogStatus='healthy' or @dogStatus='incomplete health assessment')) 
     insert into @InjuredDogIds (dogId) values (@tempId) 
    FETCH next from cur 
    INTO @tempId 
    END 
    CLOSE cur 
    DEALLOCATE cur 
    SELECT dogid as 'status' FROM @InjuredDogIds 
    ]]> 

この例ではテーブル名を入れ替えているのでタイプミスがあるかもしれません。

+2

パラメータリストが大きすぎるとはどういう意味ですか?パラメータ化されたクエリを作成しており、許可されているパラメータの最大量を超えているということですか?もしそうなら、あなたの質問は完全に間違って行われています。あなたは決してその限界に近いところに決して乗るべきではありません。それが他のものであれば、あなたがここで何をしようとしているのかをより明確に説明する必要があります。 –

+2

また、これはMSDNリンクのSQLサーバーだとは思っていますが、実際はわかりません。どのDBMSを実際に使用していますか? –

+0

データベースの一時テーブルを作成したパラメータのリストを取得しないとどうなりますか。一括挿入を使用して、テンポラリテーブルに基づく制限を使用してクエリを実行します。この方法では、特定のクエリにパラメータを渡す必要はありません – xQbert

答えて

1

まず、MySQLかsql-serverかどうかを指定してください。次に、unionの使用を確認します。その目的は、いくつかのクエリの結果を単一のデータセットに連結することです(条件はすべてのクエリの結果が同じ構造を持ち、あなたのケースであると理解しています)。たとえば:

SELECT ID , DEVICENAME FROM <yourTable> WHERE <filtering condition 1> 
UNION 
SELECT ID , DEVICENAME FROM <yourTable> WHERE <filtering condition 2> 
UNION 
SELECT ID , DEVICENAME FROM <yourTable> WHERE <filtering condition 3> 
... 
+0

拡張コメントの回答は避けてください。詳細については、[これはメタサイトで](http://meta.stackexchange.com/questions/17447/answer-or-comment-whats-the-etiquette)を参照してください。 –

+0

私が懸念している限り、私はただのコメントではなく、解決への指針でした。また、私はそれをより充実させるための例を追加しました。 – FDavidov

+0

この場合、SQL Serverです。私はこの問題が解決するかどうかを再び見るために組合を使って試してみます。より複雑な問題のスタックオーバーフロー検索で表示される他の多くの回答により、私は混乱している可能性があります。 – Kevin2205

関連する問題