1

SQL Server データベースのテーブルにトリガーを作成しています。

しかし、私ができないのはこれです:変数が@pageidあり、@templateidデータが入力されており、1つのテーブルからすべてのテンプレート列IDを読み取る必要があります-基本的にそれらのリストを取得します(テンプレートIDに依存し、数が異なる場合があります)ので、私は配列などを作成し、それを調べてテーブルに追加する何らかの方法が必要です。

そう...

  1. where availabletemplateid is @templateidすべてのテンプレート ID (下の画像: 1 番目のテーブル (使用可能なテンプレート フィールド) から - ) を配列に読み込むにはどうすればよいですか?

  2. この配列をループして、それらを 1 つずつ別のテーブルに追加するにはどうすればよいですか (下の画像: 2 番目のテーブル - (公開ページからフィールドへのマッピング) でpublicpageid = @pageid、fieldid は前のステップから 1 つずつ、フィールドの内容は「-」です) )

ここに画像の説明を入力

これまでのところ、

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

編集:これは「配列を使用して」行う方法ですが(カーソルが配列であるというわけではありませんが、DBレコードを読み込んでステップスルーする限り、ロジックは同じです)、あなたもできるはずですストレートクエリでこれを達成するには、より高速になります。

于 2012-04-19T18:40:48.383 に答える