2016-11-01 5 views
0

私はここで2つのテーブルを持っているSQLダイナミック...TSQLまたは句

  1. GROUPTABLEます。uid、レベル1、レベル2、WhereClause
  2. MainTable:UID、名前

WhereClauseフィールドをクエリの実際のWHERE句として使用できるようにする必要があります。

I.E.

select * 
from MainTable 
inner join GroupTable on GroupTable.uid=MainTable.uid 
where {WhereClause} 

つまり、WhereClauseフィールドは実際のSQLとして評価されるものです。 WhereClauseは 'Field in(1,2,3)'またはそれに類するものと等しいかもしれません。私はそれをするファンではありませんが、現時点で可能な限りプロセスを書き直すことは現実的ではありません。誰かが私を正しい方向に向けるかもしれないと願っています。ありがとう!

+0

) –

+0

http://www.sommarskog.se/dyn-search.html – HLGEM

+0

最初に "(1,2,3)のフィールド"があり、2番目の "フィールドが(3,4,5)"の場合は、 groupTableには "(1,2,3,4,5)以外のフィールド..."などがあります。動的SQLでは、行ごとに1つずつ実行します。あなたの実際の必要性に応じて、あなたが使用しているフロントエンド、テーブル全体をローカルにしてフロントエンドでフィルタリングすることは実行可能な解決策かもしれません(つまり、grouptableとmaintableが大きければ、VFPのような言語はケーキの片)。 –

答えて

0

動的SQLを使用し、動的に作成されたSQL文字列を実行すると、これを実行できます。

0

ないあなたがしたい場合は、このように動的に使用することができますあなたが望むことを確認しかし、

DECLARE @where NVARCHAR(500) = '' 

SET @where = ' userid = 3 ' 


EXEC ( ' SELECT * FROM table_name WHERE ' + @where) 

SET @where = ' userid IN (2,3,4) ' 

EXEC ( ' SELECT * FROM table_name WHERE ' + @where) 

-- Or you can also use other typo things. 

あなたが必要な正確に何を説明している場合、私は役立つかもしれません。

とにかく助けてくれることを願っています。 :)

0

あなたがこれを行うことができます:ご希望のクエリを生成します

SELECT 'select * FROM mainTable 
     inner join GroupTable on GroupTable.uid=MainTable.uid 
     where ' + t.whereClause 
FROM GroupTable 

を。ここ

0

特異動的で句は、それの大部分がこのある場合、動的SQLを使用しての優れた例である:あなたがsp_executesqlをまたはEXEC(経由動的SQLを必要

DECLARE @SQL varchar(1000) 

SET @SQL = 'SELECT Cus_Name, Cus_City, Cus_Country FROM Customers ' 

IF @Cus_Name IS NOT NULL OR @Cus_City IS NOT NULL OR _ 
    @Cus_Country IS NOT NULL 
SET @SQL = @SQL + 'WHERE ' 

IF @Cus_Name IS NOT NULL 
SET @SQL = @SQL + 'Cus_Name = ' + @Cus_Name 
... 
EXEC(@SQL) 

SQL Team