Pho*_*nix 5 sql sql-server-2005 table-valued-parameters
我写这段代码
SELECT tblprsn.prsnid, tblprsn.name
FROM tblprsn LEFT OUTER JOIN
(
SELECT tblrtm.rtmid
FROM dbo.getrtmn(tblprsn.prsnid) as getrtmn_1
) AS tblgetrtmn
ON tblprsn.prsnid = tblgetrtmn.rtmid
Run Code Online (Sandbox Code Playgroud)
dbo.getrtmn是一个表值函数,并有一个名为rtmid的uniqueidentifier字段.prsnid是uniqueidentifier
当我运行此SQL查询时导致错误:
无法绑定多部分标识符"tblprsn.prsnid".
这是您的查询:
SELECT tblprsn.prsnid, tblprsn.name
FROM tblprsn LEFT OUTER JOIN
(SELECT tblrtm.rtmid
FROM dbo.getrtmn(tblprsn.prsnid) as getrtmn_1
) AS tblgetrtmn
ON tblprsn.prsnid = tblgetrtmn.rtmid
Run Code Online (Sandbox Code Playgroud)
您正在引用子查询中的第一个表.这是不允许的.首先,我不认为子查询是必要的.您只是从第一个表中选择并执行a left outer join
以保留所有记录.子查询的唯一影响是乘以行.所以,正如你所写的那样,这个查询应该做同样的事情(重复除外):
SELECT tblprsn.prsnid, tblprsn.name
FROM tblprsn;
Run Code Online (Sandbox Code Playgroud)
但是,您可以在原始查询中执行所需操作,apply
而不是join
:
SELECT tblprsn.prsnid, tblprsn.name
FROM tblprsn cross apply
dbo.getrtmn(tblprsn.prsnid) tblgetrtmn
where tblprsn.prsnid = tblgetrtmn.rtmid
Run Code Online (Sandbox Code Playgroud)