【发布时间】:2016-11-20 03:38:56
【问题描述】:
考虑以下语句:
SELECT a.*
FROM tblA a
WHERE a.Name = @Name
UNION
(SELECT a.*
FROM tblB
WHERE a.Name = @Name)
请注意,两个不同表的范围变量(又名别名)已被赋予相同的名称。
这样做有没有潜在的冲突或歧义?是否应在语句中为所有范围变量(别名)赋予唯一名称,例如:
SELECT a.*
FROM tblA a
WHERE a.Name = @Name
UNION
(SELECT b.*
FROM tblB
WHERE b.Name = @Name)
经验表明,到目前为止,这已经奏效......每个范围变量(别名)的范围似乎并未跨越 UNION,但这取决于不受支持的行为,还是范围变量(别名)有与此类案例相关的正式定义范围?
【问题讨论】:
-
如果第一个查询有效,我很惊讶。虽然如果它可以工作,但相同的操作系统只有第一个选择而没有联合。
-
这还能用吗
-
这两个查询甚至都不会执行
-
@JorgeCampos 我已经验证它有效。因为我实际上没有两个具有相同结构的表,所以我没有使用
SELECT a.*,而是使用了SELECT a.SiteID FROM tblA a UNION SELECT a.SiteID FROM tblB a。它返回了预期的行数。
标签: sql sql-server tsql variables scope