gpt4 book ai didi

SQL - 将一个表拆分为两个并链接

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:23 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2014。我查找了 Joel Coehoorn 的解决方案 this question但它对我不起作用。

我有一个客户表,我将其重命名为 Aac_Client,其中包含客户信息和地址信息作为列。我想将 Address 移动到新表 Address 以组织内容并将其他剩余内容保留在 Ac_Client 中。我正在尝试执行以下操作:

注意 Address 和 Client 之间是一对一的关系。

BEGIN TRANSACTION
DECLARE @DataID int;

-- Insert Address
INSERT INTO Address ([StreetNumber],[StreetName] ,[StreetAddress2] ,[Unit] ,[City] ,[State] ,[Zip] ,[County])
SELECT [StreetNumber], [StreetName], [StreetAddress2], [Unit] ,[City] ,[State] ,[Zip] ,
NULL AS [County]
FROM Aac_Client

-- Get Address Id
SELECT @DataID = scope_identity();

-- Insert Client
INSERT INTO Ac_Client ( AddressId, Name, Phone, Contact )
SELECT @DataID AS AddressId, Name , Phone, Contact FROM Aac_Client

COMMIT

但问题是 INSERT 被立即执行,我在 SELECT @DataID = scope_identity();

中获取地址的最后一个 ID

最佳答案

BEGIN TRANSACTION

IF OBJECT_ID('tempdb..#InsertedAddresses') IS NOT NULL
BEGIN
DROP TABLE #InsertedAddresses
END

CREATE TABLE #InsertedAddresses (
AddressId INT
,ClientId INT
)

DECLARE @DataID int;

-- add a unique client identifier
-- Insert Address
INSERT INTO Address ([StreetNumber],[StreetName] ,[StreetAddress2] ,[Unit] ,[City] ,[State] ,[Zip] ,[County], [ClientId])
OUTPUT INSERTED.AddressId, INSERTED.ClientId (AddressId, ClientId)
SELECT [StreetNumber], [StreetName], [StreetAddress2], [Unit] ,[City] ,[State] ,[Zip] ,
NULL AS [County]
FROM Aac_Client

-- Insert Client
INSERT INTO Ac_Client ( AddressId, Name, Phone, Contact, ClientId)
SELECT i.AddressId, Name , Phone, Contact, c.ClientId
FROM Aac_Client c
INNER JON #InsertedAddresses i
ON c.ClientId = i.ClientId

COMMIT

将第一个插入语句的输出子句用于临时表。客户是否有可能拥有多个地址?或者在同一地址有超过 1 个客户?如果是这样,您可能需要考虑将 AC_Client ID 放在地址表中,而不是将 address_id 放在客户端表中。此外,如果您不担心在同一地址有多个客户端的情况下独立更改地址,您可以考虑使用第三个表来关联地址和客户端,这样您就不必重复地址或客户端来创建多对多关系。

我想扩展 scope_identity 是一个标量值,意味着只保留 1 个值,它是作用域中更改的最后一行的标识。在您的情况下,您需要所有 ID,因此您需要使用输出子句。

关于SQL - 将一个表拆分为两个并链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com