SQL引用带有变量的外键

时间:2012-11-21 01:03:39

标签: sql sql-server variables

我必须在循环中检查一些外键,并且需要用变量替换外键字段的名称(例如@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查询之前设置的字段名?

1 个答案:

答案 0 :(得分: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,但具有变量中指定的键的表除外。