将变量插入具有关系标识符的单独表中

时间:2014-10-18 19:53:21

标签: php sql-server

我需要一些方法的帮助。

我在表单text中有3个'add_task'个输入:

<form action="page.php" method="POST">
    <input type="text" name="task_string" value="" />
    <input type="text" name="hours" value="" />
    <input type="text" name="minutes" value="" />
    <input type="submit" value="Add Task" />
</form>

表单&#39;创建&#39;使用上述输入的时间轴任务。

现在,我有两个表,taskstimelines

我可以使用INSERT INTOtask_string任务表,然后该条目包含一个自动递增的唯一id

// tasks
+----+------------------+
| id | string           |
+----+------------------+
| 1  | task string here |
+----+------------------+

我现在需要在minutes表中输入hourstimelines值,但我需要参考上面的tasks.id

//timelines
+----+-------+---------+-----------------------------+
| id | hours | minutes | task_id                     |
+----+-------+---------+-----------------------------+
| 1  | 3     | 29      | // task_id from table above |
+----+-------+---------+-----------------------------+

如何在多用户环境中使用SQL Server和PHP实现此目的?

2 个答案:

答案 0 :(得分:1)

您可以将@@IDENTITY用于此目的;以下是一个例子。但是对于多用户环境,您必须使用transaction block来确保插入成功。

create procedure doDML(@task_string varchar(100),@hours int, @minutes int)
as
begin
declare @lastID int;
insert into tasks values(@task_string);
set @lastID = @@IDENTITY;

insert into timelines values(@hours, @minutes, @lastID);
end

答案 1 :(得分:1)

您可以使用存储过程插入带有输出参数的任务。此参数应该是来自id的新生成的dbo.taks

CREATE PROCEDURE dbo.Tasks_Insert (
    @id INT OUTPUT, -- dbo.tasks.id
    @name NVARCHAR(50) -- Replace it with the propper data type
)
AS
BEGIN
    INSERT dbo.tasks (name, ...) VALUES (@name, ...)
    SET @id = SCOPE_IDENTITY()
END;
GO

这样,dbo.Tasks_Insert将返回新的id

然后,您可以使用另一个SP将数据插入时间轴:

CREATE PROCEDURE dbo.Timelines_Insert (
    @id INT OUTPUT, -- dbo.timelines.id
    @duration TIME(0), -- or @minutes INT, 3h 29m could be stored as 209m 
    @task_id INT -- the @id OUTPUT parameter from dbo.Tasks_Insert
)
AS
...