0

我正在构建一个生成表单的应用程序,但是由于这些表单上可以有 100 个字段,我想尽可能在​​几个查询中创建它们。我对使用存储过程或函数没有任何问题。

形式

id - auto_inc
...

字段

id - auto_inc
...

表单域

formID - 外键
fieldID - 外键

当我创建一个表单时,我运行

INSERT INTO forms (xx) VALUES ('xx')

然后使用

SELECT SCOPE_IDENTITY()

从表单中获取 ID

接下来,我想在一两个查询中添加所有字段及其表单字段关系。

INSERT INTO fields (xx, xx) VALUES ('xx', 'xx'), ('xx', 'xx'), ('xx', 'xx')...

Insert INTO formfields (formID, fieldID) 
VALUES (@FORM_ID, @fieldID1), (@FORM_ID @fieldID2)...

我正在使用 php 动态生成这些查询,因此 @FORM_ID 实际上是一个 php 变量。

4

1 回答 1

1

如果我理解正确,您可以使用SCOPE_IDENTITY()OUTPUT的组合,这是一个示例

CREATE TABLE Foo (
    PK INT IDENTITY(1,1) PRIMARY KEY,
    I CHAR(1)
)

CREATE TABLE Bar (
    PK INT IDENTITY(1,1) PRIMARY KEY,
    J INT
)

CREATE TABLE Map (
    FooPK INT,
    BarPK INT
)
GO

INSERT INTO Foo(I) VALUES ('A')

DECLARE @FooPK INT = SCOPE_IDENTITY()

DECLARE @temp TABLE (BarPK INT)

INSERT INTO Bar(J)
OUTPUT INSERTED.PK INTO @temp
VALUES (4), (5),(6),(7)

INSERT INTO Map(FooPK, BarPK)
SELECT @FooPK, BarPK
FROM @temp

SELECT * FROM Foo
SELECT * FROM Bar
SELECT * FROM Map
     GO

DROP TABLE Foo
DROP TABLE Bar
DROP TABLE Map
     GO
于 2013-06-27T15:12:41.627 回答