根据您使用该查询的位置和方式,您可以使用
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
除了在变量中指定键的表。