1

我正在 SQL Server 数据库中的表上创建触发器。

但我无法做到的是:我有变量@pageid并已@templateid填充,我需要从一个表中读取所有模板列 id - 基本上得到它们的列表(它们取决于模板 id 并且数量可能会有所不同)所以我需要某种方法来制作数组或其他东西并通过它并将其添加到表格中。

所以...

  1. 如何将所有模板 ID(下图:从第一个表(可用模板字段)- where availabletemplateid is @templateid)读入数组?

  2. 如何循环遍历该数组并将它们逐个添加到另一个表(下图:第二个表 - (公共页面到字段映射),其中publicpageid = @pageidfieldid 是上一步中的一个一个,字段内容是“-” )

在此处输入图像描述

到目前为止我有

ALTER TRIGGER CreatePageFields
ON dbo.PublicPages
FOR INSERT
AS
BEGIN TRANSACTION

/* variables */
DECLARE
    @pageid bigint,
    @templateid bigint

/* insert template fields for this page */
SELECT @pageid = id, @templateid = templateid FROM inserted

/* TODO 1 get all template field id's */
/* TODO 2 insert each templatefieldid / page combination */    

/* execute */
COMMIT TRANSACTION

GO

非常感谢

4

2 回答 2

4

我认为您不需要数组(表变量)或任何循环(光标)。这样的事情会快得多(猜测你的表和字段名):

INSERT INTO publicpagetofieldmapping (PublicPageID, FieldID, FieldContent)
SELECT t1.ID, t2.ID, '-'
FROM INSERTED t1
JOIN AvailableTemplateFields t2
ON t1.TemplateID = t2.availabletemplateid
于 2012-04-19T18:44:53.487 回答
0

使用游标:

DECLARE cur CURSOR FOR
SELECT ID
FROM AvailableTemplateFields
WHERE AvailableTemplateID = @templateid;

FETCH NEXT FROM cur INTO @current_template_id

WHILE @@FETCH_STATUS = 0
BEGIN

    INSERT INTO PublicPageFieldMapping (
        PublicPageID, FieldID, FieldContent
    ) VALUES (
        @pageid, @current_template_id, '-'
    );

    FETCH NEXT FROM cur INTO @current_template_id;
END

CLOSE cur
DEALLOCATE cur

编辑:虽然这是“使用数组”的方法(不是游标是数组,但逻辑与将数据库记录读入其中然后单步执行相同),您也应该能够通过直接查询来完成此操作,这会更快。

于 2012-04-19T18:40:48.383 回答