这个问题与here提出的问题非常相似,所以我希望这不是太多余。
我是T-SQL的新手,我想了解是否有一种不同/更好的方法将记录插入两个表。
例如,我有一个带有名称和地址的表单,在我的数据库中,如果我想插入以下内容,则表示最基本的两个表(客户端和地址):
名称字段(第一个,中间的最后一个年龄)要命名表和地址(街道号,街道名称,城市,州,邮政编码)到地址表,名称是主表,有人可能指向我正确的方向在SQL Server / T-sql中执行此操作的最佳方法是什么?或者它是否与MySQL语法中的相同,首先插入人,然后选择最后插入的用户获取id,然后将地址和id(作为fk)添加到地址表中?
我也很欣赏有关最佳方法的任何链接或其他阅读。
干杯(并提前致谢)
答案 0 :(得分:3)
你需要做两次插入。在第一次插入客户端表后,使用@@ identity获取插入记录的ID。
INSERT INTO client VALUES ('Peter', 'Griffin')
SET @clientKey = @@IDENTITY
INSERT INTO address VALUES (@clientKey, '123 Elm')
答案 1 :(得分:1)
为此创建STORED PROCEDURE
怎么样?
示例:
CREATE PROCEDURE Registration.IdentifyStudentsByState
@Gdr nvarchar(20),
@StateOrProvince char(2)
AS
BEGIN
SELECT FullName = LastName + ', N' + FirstName,
DATEDIFF(year, DateOfBirth, GETDATE()) AS Age,Gender
FROM Registration.Students
WHERE (Gender = @Gdr) AND (State = @StateOrProvince);
END
所以在你的情况下你应该写这样的东西:
CREATE PROCEDURE InsertData
@iFirst varchar(50),
@iMiddle varchar(50),
@iLast varchar(50),
@iAge varchar(50),
@iStreetNo varchar(50),
@iStreetName varchar(50),
@iCity varchar(50),
@iState varchar(50),
@iZip varchar(50)
AS
BEGIN
INSERT tableNameA(First, Middle, Last, Age) VALUES (@iFirst,@iMiddle,@iLast,@iAge);
INSERT tableNameB(StreetNo,Streetname,City, State,Zip) VALUES (@iStreetNo,@iStreetName,@iCity,@iState,@iZip);
END
<强> USAGE 强>
EXEC InsertData 'john','mm','doe','45','asd','fg','fgh','fgh','fgh';
注意:上图仅是如何创建STORED PROCEDURE
的示例,您可以修改PARAMETERs
,使用的DATA TYPEs
和查询。我希望这可以帮助你。谢谢!的