使用SQL Server OUTPUT ... INTO ....子句复制数据时出错

时间:2016-08-30 13:14:56

标签: sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2

我正在尝试将数据插入到人员表中。平行地,我必须将插入的人员ID(标识列值)以及从另一个表的提供者复制到提供者。我尝试了下面的查询,但是我收到了一个错误。

多部分标识符" P.Provider_ID"无法受约束。

INSERT INTO PERSONS (
            FirstName
            ,LastName
            ,Gender
            ,DOB
            ,EmailID
            ,OfficePhone
            ,Fax
            ,Mobile
            ,CertificationType_ID
            --,License
            --,StateCertificaionNo
            --,StateCertificationExpiration
            --,Comments
            ,ERTCleared
            ,IsAMR
            ,IsActive
            ,CreatedDate
            ,ModifiedDate
            ,IsCrewMember
            ,UserName
            )
        OUTPUT INSERTED.Person_ID
            ,P.Provider_ID
        --,getdate()
        --,getdate()
        --,@appuserId
        --,@appuserId
        INTO @ProviderPersons(PersonID, ProviderID)
        --00, CreatedDate, ModifiedDate, CreatedUser_ID, ModifiedUser_ID)
        SELECT S.FirstName
            ,S.LastName
            ,S.Gender
            ,S.DOB
            ,S.EmailID
            ,S.OfficePhone
            ,S.Fax
            ,S.Mobile
            ,1 AS CertificationType_ID
            ,0 AS ERTCleared
            ,CASE 
                WHEN S.IsAMR = 'Yes'
                    THEN 1
                ELSE 0
                END AS IsAMR
            ,1 AS IsActive
            ,getdate() AS CreatedDate
            ,getdate() AS ModifiedDate
            ,1 AS IsCrewMember
            ,S.UserName
        FROM [dbo].[STA_CrewMembers] S
        INNER JOIN [dbo].[Providers] P ON P.BusinessUnitNumber = S.BusinessUnitNumber
            OR P.NAME = S.PROVIDER
        WHERE NOT EXISTS (
                SELECT 1
                FROM Persons
                WHERE EmailID = S.EmailID
                )

请建议我如何更好地处理这个问题。在此先感谢。

1 个答案:

答案 0 :(得分:1)

使用

OUTPUT INSERTED.Person_ID
        ,INSERTED.Provider_ID

你不能使用表别名。由于表别名

,下面的例子不起作用
declare @id table
(
id int
)

insert into t1
output n.id into @id
select top 10* from numbers n


select * from @id