微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您如何将数据从单独的表合并到表变量中?

如何解决您如何将数据从单独的表合并到表变量中?

我正在尝试从两个不同的表中获取数据,并将它们合并为一个表变量。 我正在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 举报,一经查实,本站将立刻删除。