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