如何使用t-sql将数据插入到两个表中

时间:2012-01-28 02:27:46

标签: sql-server database tsql

这个问题与here提出的问题非常相似,所以我希望这不是太多余。

我是T-SQL的新手,我想了解是否有一种不同/更好的方法将记录插入两个表。

例如,我有一个带有名称和地址的表单,在我的数据库中,如果我想插入以下内容,则表示最基本的两个表(客户端和地址):

名称字段(第一个,中间的最后一个年龄)要命名表和地址(街道号,街道名称,城市,州,邮政编码)到地址表,名称是主表,有人可能指向我正确的方向在SQL Server / T-sql中执行此操作的最佳方法是什么?或者它是否与MySQL语法中的相同,首先插入人,然后选择最后插入的用户获取id,然后将地址和id(作为fk)添加到地址表中?

我也很欣赏有关最佳方法的任何链接或其他阅读。

干杯(并提前致谢)

2 个答案:

答案 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和查询。我希望这可以帮助你。谢谢!