SQL函数:无法绑定多部分标识符
我试图从我的桌子上选择所有没有在特定日期预订的“舱位”。我对SQL相当陌生,据我所知,我的问题是我无法访问“bookedWeeks”表,因为我正在选择我的“CAB”表。我尝试过使用内部联接,但我不知道如何使其工作 我在论坛上搜索过类似的错误,但没有一个真正符合我的目的 它告诉我无法绑定多部分标识符“bookedWeeks.cabinNr”SQL函数:无法绑定多部分标识符,sql,sql-server,sql-server-2008,function,Sql,Sql Server,Sql Server 2008,Function,我试图从我的桌子上选择所有没有在特定日期预订的“舱位”。我对SQL相当陌生,据我所知,我的问题是我无法访问“bookedWeeks”表,因为我正在选择我的“CAB”表。我尝试过使用内部联接,但我不知道如何使其工作 我在论坛上搜索过类似的错误,但没有一个真正符合我的目的 它告诉我无法绑定多部分标识符“bookedWeeks.cabinNr” CREATE FUNCTION showAllUnbooked (@weekToCheck integer) RETURNS Cabin AS BEG
CREATE FUNCTION showAllUnbooked (@weekToCheck integer)
RETURNS Cabin
AS
BEGIN
RETURN
(
SELECT * FROM Cabin WHERE Cabin.CNr = bookedWeeks.CabinNr AND @weekToCheck != bookedWeeks.weekNr
)
END
GO
我想在这里得到一些帮助。
谢谢试试这个:
CREATE FUNCTION showAllUnbooked (@weekToCheck integer)
RETURNS Cabin
AS
BEGIN
RETURN
(
SELECT *
FROM Cabin
JOIN bookedWeeks on Cabin.CNr = bookedWeeks.CabinNr
AND @weekToCheck != bookedWeeks.weekNr
)
END
Go
你可以走两条不同的路。 使用连接:
SELECT *
FROM Cabin
JOIN bookedWeeks on Cabin.CNr = bookedWeeks.CabinNr AND @weekToCheck != bookedWeeks.weekNr
或者使用where子句从两个表中选择记录(几乎是您的查询,但在from中添加了bookedWeeks)
SELECT *
FROM Cabin, bookedWeeks
WHERE Cabin.CNr = bookedWeeks.CabinNr AND @weekToCheck != bookedWeeks.weekNr
连接可能会执行得更好,但两个查询都会返回相同的结果。有几个小问题:您需要在
from
子句中声明bookedWeeks
,但您还需要声明函数返回的结果略有不同:
create function showAllUnbooked ( @weekToCheck integer ) returns table as
return
(
select
* --> should not use * - explicitly list columns instead
from
Cabin
left outer join
BookedWeeks
on
Cabin.CNr = BookedWeeks.CabinNr
where
BookedWeeks.WeekNr = @weekToCheck
and
BookedWeeks.CabinNr is null
)
左边的连接意味着你会得到“所有的船舱”最初,但将排除在
BookedWeeks
中不匹配的记录。此外,它只检查指定的周,因此可能会更有效。最后,最好不要使用*来标识查询返回的列。这主要是一个维护问题,以说明可能影响此fu的更改NC操作。您的数据库中是否有“bookedWeeks”对象?您的FROM子句中缺少bookedWeeks表。Slect*是SQL反模式,不应在生产代码中使用。切勿建议使用隐式联接的SQL反模式。此外,如果您没有联接,请选择*在联接字段中两次返回相同的dat,这是低效的。