如何解决您如何将数据从单独的表合并到表变量中?
我正在尝试从两个不同的表中获取数据,并将它们合并为一个表变量。 我正在AdventureWorks2016中工作。 到目前为止,这就是我所拥有的:
--Query 4 – Must use the UNION operator
SELECT *
FROM Person.Address
SELECT *
FROM Person.StateProvince
--TABLE VARIABLE
DECLARE @PersonAddress TABLE (Name VARCHAR(50),AddressLine NVARCHAR(50),StateProvinceID INT)
INSERT INTO @PersonAddress
SELECT AddressLine1,StateProvinceID
FROM Person.Address
UNION ALL
SELECT [Name],StateProvinceID
FROM Person.StateProvince
SELECT *
FROM @PersonAddress
“消息205,第16层,状态1,第156行 所有使用UNION,INTERSECT或EXCEPT运算符组合的查询在其目标列表中必须具有相同数量的表达式。“
让我知道您的想法。 谢谢!
解决方法
您需要的是联接,因为您正在使用AdventureWorks DB,所以我认为您要实现的目标是:
DECLARE @PersonAddress TABLE (Name VARCHAR(50),AddressLine NVARCHAR(50),StateProvinceID INT)
INSERT INTO @PersonAddress
Select PSP.Name,PA.AddressLine1,PA.StateProvinceID
From Person.Address PA
Join Person.StateProvince PSP ON PSP.StateProvinceID = PA.StateProvinceID
SELECT *
FROM @PersonAddress
,
第一个查询有两个字段(AddressLine1和City),而第二个查询只有一个字段(名称),这就是SQL Server抱怨的地方。
您要加入的是他们,而不是工会。由于我们没有您的表格结构,因此这是一个客人:
INSERT INTO @PersonAddress (name,addresline,stateprovince)
SELECT name,adressline1,stateprovince
FROM Person.Address pa
inner join Person.AddressType pat on pa.AddressTypeId = pa.id -- make sure to join the tables on the required fields
,
正如其他人所说,union all
要求两个查询都具有相同的结构,
我不清楚您想要实现什么(可以通过贡献者之一所说的联接来完成),但是针对您的问题,您可能需要执行以下操作,
注意:我刚刚使用了需要用原始表更改的虚拟表
DECLARE @PersonAddress TABLE (Name VARCHAR(50),StateProvinceID INT)
INSERT INTO @PersonAddress
SELECT null name,'Address 1' AddressLine1,100 StateProvinceID
UNION ALL
SELECT 'Dummy' name,null AddressLine1,100 StateProvinceID
SELECT *
FROM @PersonAddress
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。