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)

执行语句

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 回答