Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法绑定多部分标识符_Sql_Sql Server 2008_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql 无法绑定多部分标识符

Sql 无法绑定多部分标识符,sql,sql-server-2008,tsql,sql-server-2008-r2,Sql,Sql Server 2008,Tsql,Sql Server 2008 R2,MS SQL server 2008 r2 尝试创建使用表变量的sql函数。当我尝试创建函数时,它不断抛出错误。它要么抱怨我需要声明标量变量@LocationUpdate,要么如果我使用表别名LU,它抱怨多部分标识符LU.ID无法绑定 有人知道我做错了什么吗?在这之前,我有一个sql语句,它插入到表变量中,并且没有抛出任何错误。我有一种感觉,我在做一些愚蠢的事情,但我看不到 DECLARE @LocationUpdate TABLE ( [ID] [int] NOT NULL, [Facilit

MS SQL server 2008 r2

尝试创建使用表变量的sql函数。当我尝试创建函数时,它不断抛出错误。它要么抱怨我需要声明标量变量@LocationUpdate,要么如果我使用表别名LU,它抱怨多部分标识符LU.ID无法绑定

有人知道我做错了什么吗?在这之前,我有一个sql语句,它插入到表变量中,并且没有抛出任何错误。我有一种感觉,我在做一些愚蠢的事情,但我看不到

DECLARE @LocationUpdate TABLE (
[ID] [int] NOT NULL,
[FacilityName] [nvarchar](500) NULL,
[TrialUpdateID] [int] NOT NULL,
[StatusID] [int] NULL,
[City] [nvarchar](100) NULL,
[StateID] [int] NULL,
[Zip] [nvarchar](100) NULL,
[CountryID] [int] NULL,
[ContactName] [nvarchar](500) NULL,
[ContactPhone] [nvarchar](500) NULL,
[ContactPhoneExt] [nvarchar](500) NULL,
[ContactEmail] [nvarchar](500) NULL
)

SELECT@Return=
当l.ContactFirstName+“”+l.ContactLastName@LocationUpdate.ContactName然后1 else 0结束时的情况
+当l.ContactEmail@LocationUpdate.ContactEmail然后1其他0结束时的情况
+当l.ContactPhone@LocationUpdate.ContactPhone然后1 ELSE 0结束时的情况
+当l.StatusID@LocationUpdate.StatusID然后1 ELSE 0结束时的情况
+当l.Zip@LocationUpdate.Zip然后1 ELSE 0结束时,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate lu,位置l
左连接LocationUpdateHistory luh ON@LocationUpdate.ID=luh.idx
其中l.TrialID=@TrialID
l.City=@LocationUpdate.City
和l.FacilityName=@LocationUpdate.FacilityName

在查询的“选择”部分,将var的名称括在方括号内或使用表别名

括号

SELECT @Return =
case when l.ContactFirstName +' ' +l.ContactLastName <> [@LocationUpdate].ContactName then 1 else 0 END
+ CASE WHEN l.ContactEmail <> [@LocationUpdate].ContactEmail THEN 1 ELSE 0 END
+ CASE WHEN l.ContactPhone <> [@LocationUpdate].ContactPhone THEN 1 ELSE 0 END
+ CASE WHEN l.StatusID <> [@LocationUpdate].StatusID THEN 1 ELSE 0 END
+ CASE WHEN l.Zip <> [@LocationUpdate].Zip THEN 1 ELSE 0 END,
@Cleared = ISNULL(luh.Cleared, 0)
FROM @LocationUpdate , Location l
LEFT JOIN LocationUpdateHistory luh ON [@LocationUpdate].ID = luh.idx
WHERE l.TrialID = @TrialID
AND l.City = [@LocationUpdate].City
AND l.FacilityName = [@LocationUpdate].FacilityName
SELECT@Return=
当l.ContactFirstName+''+l.ContactLastName[@LocationUpdate].ContactName然后是1或0结束时的情况
+l.ContactEmail[@LocationUpdate].ContactEmail然后1或0结束时的情况
+当l.ContactPhone[@LocationUpdate].ContactPhone然后1或0结束时的情况
+当l.StatusID[@LocationUpdate].StatusID然后是1或0结束时的情况
+l.Zip[@LocationUpdate].Zip然后1或0结束时的情况,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate,位置l
[@LocationUpdate].ID=luh.idx上的左连接LocationUpdateHistory luh
其中l.TrialID=@TrialID
和l.City=[@LocationUpdate].City
和l.FacilityName=[@LocationUpdate].FacilityName
别名

SELECT@Return=
当l.ContactFirstName+“”+l.ContactLastName lu.ContactName然后1 else 0结束时的情况
+当l.ContactEmail lu.ContactEmail然后1 ELSE 0结束时的情况
+当l.ContactPhone lu.ContactPhone然后1 ELSE 0结束时的情况
+当l.StatusID lu.StatusID然后1 ELSE 0结束时的情况
+当l.Zip lu.Zip然后1 ELSE 0结束时,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate lu,位置l
左连接位置lu.ID=luh.idx上的UpdateHistory luh
其中l.TrialID=@TrialID
l.City=lu.City
l.FacilityName=lu.FacilityName

还可以尝试展开联接,并在分配给变量的位置使用TOP 1(为了清晰)

SELECT TOP 1 
  @Return =
case when l.ContactFirstName +' ' +l.ContactLastName <> lu.ContactName then 1 else 0 END
+ CASE WHEN l.ContactEmail <> lu.ContactEmail THEN 1 ELSE 0 END
+ CASE WHEN l.ContactPhone <> lu.ContactPhone THEN 1 ELSE 0 END
+ CASE WHEN l.StatusID <> lu.StatusID THEN 1 ELSE 0 END
+ CASE WHEN l.Zip <> lu.Zip THEN 1 ELSE 0 END,
@Cleared = ISNULL(luh.Cleared, 0)
FROM @LocationUpdate lu
JOIN Location l
  ON 
      l.City = lu.City
  AND l.FacilityName = lu.FacilityName
LEFT JOIN LocationUpdateHistory luh ON lu.ID = luh.idx
WHERE l.TrialID = @TrialID
选择前1名
@返回=
当l.ContactFirstName+“”+l.ContactLastName lu.ContactName然后1 else 0结束时的情况
+当l.ContactEmail lu.ContactEmail然后1 ELSE 0结束时的情况
+当l.ContactPhone lu.ContactPhone然后1 ELSE 0结束时的情况
+当l.StatusID lu.StatusID然后1 ELSE 0结束时的情况
+当l.Zip lu.Zip然后1 ELSE 0结束时,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate lu
加入位置l
在…上
l、 城市
l.FacilityName=lu.FacilityName
左连接位置lu.ID=luh.idx上的UpdateHistory luh
其中l.TrialID=@TrialID

在查询的“选择”部分,将var的名称括在方括号内或使用表别名

括号

SELECT @Return =
case when l.ContactFirstName +' ' +l.ContactLastName <> [@LocationUpdate].ContactName then 1 else 0 END
+ CASE WHEN l.ContactEmail <> [@LocationUpdate].ContactEmail THEN 1 ELSE 0 END
+ CASE WHEN l.ContactPhone <> [@LocationUpdate].ContactPhone THEN 1 ELSE 0 END
+ CASE WHEN l.StatusID <> [@LocationUpdate].StatusID THEN 1 ELSE 0 END
+ CASE WHEN l.Zip <> [@LocationUpdate].Zip THEN 1 ELSE 0 END,
@Cleared = ISNULL(luh.Cleared, 0)
FROM @LocationUpdate , Location l
LEFT JOIN LocationUpdateHistory luh ON [@LocationUpdate].ID = luh.idx
WHERE l.TrialID = @TrialID
AND l.City = [@LocationUpdate].City
AND l.FacilityName = [@LocationUpdate].FacilityName
SELECT@Return=
当l.ContactFirstName+''+l.ContactLastName[@LocationUpdate].ContactName然后是1或0结束时的情况
+l.ContactEmail[@LocationUpdate].ContactEmail然后1或0结束时的情况
+当l.ContactPhone[@LocationUpdate].ContactPhone然后1或0结束时的情况
+当l.StatusID[@LocationUpdate].StatusID然后是1或0结束时的情况
+l.Zip[@LocationUpdate].Zip然后1或0结束时的情况,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate,位置l
[@LocationUpdate].ID=luh.idx上的左连接LocationUpdateHistory luh
其中l.TrialID=@TrialID
和l.City=[@LocationUpdate].City
和l.FacilityName=[@LocationUpdate].FacilityName
别名

SELECT@Return=
当l.ContactFirstName+“”+l.ContactLastName lu.ContactName然后1 else 0结束时的情况
+当l.ContactEmail lu.ContactEmail然后1 ELSE 0结束时的情况
+当l.ContactPhone lu.ContactPhone然后1 ELSE 0结束时的情况
+当l.StatusID lu.StatusID然后1 ELSE 0结束时的情况
+当l.Zip lu.Zip然后1 ELSE 0结束时,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate lu,位置l
左连接位置lu.ID=luh.idx上的UpdateHistory luh
其中l.TrialID=@TrialID
l.City=lu.City
l.FacilityName=lu.FacilityName

还可以尝试展开联接,并在分配给变量的位置使用TOP 1(为了清晰)

SELECT TOP 1 
  @Return =
case when l.ContactFirstName +' ' +l.ContactLastName <> lu.ContactName then 1 else 0 END
+ CASE WHEN l.ContactEmail <> lu.ContactEmail THEN 1 ELSE 0 END
+ CASE WHEN l.ContactPhone <> lu.ContactPhone THEN 1 ELSE 0 END
+ CASE WHEN l.StatusID <> lu.StatusID THEN 1 ELSE 0 END
+ CASE WHEN l.Zip <> lu.Zip THEN 1 ELSE 0 END,
@Cleared = ISNULL(luh.Cleared, 0)
FROM @LocationUpdate lu
JOIN Location l
  ON 
      l.City = lu.City
  AND l.FacilityName = lu.FacilityName
LEFT JOIN LocationUpdateHistory luh ON lu.ID = luh.idx
WHERE l.TrialID = @TrialID
选择前1名
@返回=
当l.ContactFirstName+“”+l.ContactLastName lu.ContactName然后1 else 0结束时的情况
+当l.ContactEmail lu.ContactEmail然后1 ELSE 0结束时的情况
+当l.ContactPhone lu.ContactPhone然后1 ELSE 0结束时的情况
+当l.StatusID lu.StatusID然后1 ELSE 0结束时的情况
+当l.Zip lu.Zip然后1 ELSE 0结束时,
@Cleared=ISNULL(luh.Cleared,0)
来自@LocationUpdate lu
加入位置l
在…上
l、 城市
l.FacilityName=lu.FacilityName
左连接位置lu.ID=luh.idx上的UpdateHistory luh
其中l.TrialID=@TrialID

显式联接优先于逗号联接。在查询中,您实际上是将
LocationUpdateHistory
单独连接到
Location
,而不是交叉连接到
@LocationUpdate
Location
,因此您不能引用
lu

一种可能的解决方案是将逗号连接替换为
交叉连接
,然后可以在
ON
子句中访问
lu
别名

但是,您可能还需要为将
Location
LocationUpdateHistory
和/或
@LocationUpdate
连接提供一些条件<
...
FROM @LocationUpdate lu
  INNER JOIN Location l ON l.City = lu.City
                       AND l.FacilityName = lu.FacilityName
  LEFT JOIN LocationUpdateHistory luh ON lu.ID = luh.idx
WHERE l.TrialID = @TrialID