我在SQL领域非常环保,所以我不知道真正的想法或类型是什么,但是我将它们称为“ Transfer table”,并且将尝试解释我的意思和问题。请纠正我!
3张桌子。
联系人:ID(主键),名字,姓氏,SSN等
地址:ID(主键),城市,街道等
ContactsTransferAddress (简称:CTA):ID(主键),ContactID(外键),AddressID(外键)
现在这只是一个练习...目前,我已经创建了一个存储过程,
ALTER PROCEDURE [dbo].[AddAddress]
@Street varchar(MAX),
@City varchar(MAX),
@CID int, --ContactID
@AID int OUTPUT --AddressID
AS
BEGIN
INSERT INTO Addressess(Street,City) VALUES (@Street, @City)
SET @AID = SCOPE_IDENTITY()
INSERT INTO CTA(CID,AID) VALUES (@CID, @AID)
END
将连接数据放入CTA时,是否可以让两个人共享相同的AddressID(AID)?现在,我得到上面的SP将为每个地址提供不同的ID。但是我不知道如何拥有唯一的地址。
谢谢!
答案 0 :(得分:1)
首先,定义Addresses
表,以便不允许重复:
alter table Addresses add constraint unq_Addresses_City_Street
unique (City, Street);
然后您必须对重复项做些事情,因为您的代码将失败。
因为您正在学习,所以我建议您使用一种检查并插入的方法:
SELECT @AID = AddressId
FROM Addresses
WHERE Street = @Street and City = @City;
IF @Aid IS NULL
BEGIN
INSERT INTO Addresses(Street, City)
VALUES (@Street, @City);
SET @AID = SCOPE_IDENTITY();
END;
INSERT INTO CTA (CID, AID)
VALUES (@CID, @AID);
在更严格的代码中,我将采取其他预防措施。特别是:
OUTPUT
子句返回插入的ID。TRY
而不是CATCH
上使用INSERT
/ IF
来检查约束是否违反。