1

ループ内のいくつかの外部キーをチェックする必要があり、外部キー フィールドの名前を変数 (@fk_field など) に置き換える必要があります。

私のクエリは次のようになります。

    SELECT 
        ad.id 
        , ad.@fk_field
        , a1.@jnktn_field
    FROM @tblname tbl LEFT JOIN @jnktn_tbl jnktn ON tbl.@fk_field=jnktn.@jnktn_field
    WHERE ad.FK1 <> isnull(a1.ID,0)

どうやら私のようにポイントの直後に変数を使用することはできませんが、正しいテーブルを参照するにはこれを行う必要があります。では、変数を使用して、SQL クエリの前に設定されたフィールド名を挿入するにはどうすればよいでしょうか?

4

1 に答える 1

0

そのクエリをどこでどのように使用するかに応じて、使用できます

SQLCMD 変数

:setvar FKFIELD field_name

SELECT 
    ad.id 
    , ad.@fk_field
    , a1.@jnktn_field
FROM @tblname tbl LEFT JOIN @jnktn_tbl jnktn ON tbl.$(FKFIELD)=jnktn.field
WHERE ad.FK1 <> isnull(a1.ID,0)

EXECUTE ステートメント

EXEC('SELECT 
    ad.id 
    , ad.@fk_field
    , a1.@jnktn_field
FROM @tblname tbl LEFT JOIN @jnktn_tbl jnktn ON tbl.' + @fk_field +'=jnktn.field
WHERE ad.FK1 <> isnull(a1.ID,0)')

複数の JOIN 句

SELECT 
    ad.id 
    , ad.field
    , a1.field
FROM @tblname tbl 
LEFT JOIN @jnktn_tbl jnktn ON tbl.Field1=jnktn.field and @fk_field = 'fieldName1'
LEFT JOIN @jnktn_tbl jnktn ON tbl.Field2=jnktn.field and @fk_field = 'fieldName2'
LEFT JOIN @jnktn_tbl jnktn ON tbl.Field3=jnktn.field and @fk_field = 'fieldName3'
WHERE ad.FK1 <> isnull(a1.ID,0)

更新: この最後の例では、クエリを正しく行うために少し努力が必要であり、正確な要件によってはまったく機能しない可能性があります。NULLアイデアは、参照されるすべてのテーブルに結合し、変数で指定されたキーを持つテーブルを除いて、これらのテーブルのすべてのフィールドを設定することです。

于 2012-11-21T01:15:39.933 に答える