我正在尝试将一些数据插入到我的ms sql数据库中的两个不同的表中(ms sql server 2012)。
考虑以下2个表,其中包含有关民意调查及其选择的信息。
+----------------+
| Polls |
+----------------+
| pollID | The id of a poll (auto increment)
| memberID | The id of the member, owning the poll
| pollTitle | The title/question of the poll
| date | The date of the poll
+----------------+
+----------------+
| PollChoices |
+----------------+
| pollChoiceID | The id of a poll choice (auto increment)
| pollID | The id of the poll, that include this choice
| pollChoice | The name/title of the poll choice
+----------------+
如何进行查询,以最有效的方式插入数据? 我总是可以进行2次查询,但无法确定如何使用单个查询。
在这种情况下,对我来说主要问题是在插入民警时获取民意调查的ID。如何才能获得这个新插入的“pollID”(自动增量)并在同一查询中使用它?此外,是否有必要使用事务或存储过程(我已经在某处读过)?
非常感谢任何帮助。
答案 0 :(得分:1)
我不认为你所做的事情是可能的。
我认为执行您描述的操作的最佳方法是将其包装在存储过程中。您可以使用SCOPE_IDENTITY获取先前添加的记录的ID和TRANSACTION以及TRY-CATCH块,以确保执行两个插入查询。< / p>
CREATE PROCEDURE [dbo].[usp_InsertPoll] (
-- sproc declaration here, including the following parameters:
-- @memberID, @pollTitle, @date, @pollChoiceID, @pollChoice
)
AS BEGIN
DECLARE @pollID INT
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO Polls (memberID, pollTitle, date)
VALUES (@memberID, @pollTitle, @date)
-- Get the last identity value inserted into an identity column in the same scope
SET @pollID = SCOPE_IDENTITY();
INSERT INTO PollChoices(pollChoiceID, pollID, pollChoice )
VALUES (@pollChoiceID, @pollID, @pollChoice)
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END
答案 1 :(得分:0)
尝试此查询
declare @npi int
INSERT INTO Polls (memberID, pollTitle, date)
VALUES (@memberID, @pollTitle, @date)
set @npi=
(select top 1 PollId
from Polls
order by PollId desc)
INSERT INTO PollChoices(pollChoiceID, pollID, pollChoice )
VALUES (@pollChoiceID, @npi, @pollChoice)