0

ID列とステートメント列を持つテーブルがあります。ステートメント列には、テーブル名への挿入、テーブル名の更新、テーブル名の削除(テーブル名は任意のxxx)などのステートメントが含まれます。SPを実行する場合、ストアドプロシージャを作成する必要があるシナリオがあります。最初に親テーブル名を使用してステートメント列に挿入レコードを取得し、次に子テーブルをステートメントに挿入し、挿入後に更新ステートメントを取得し、最後に子テーブルステートメントを使用してステートメントを削除し、次に親を取得する必要があります。

出力は次のようになります

statements
INSERT INTO country(parent to state)
INSERT INTO state(parent to city)
INSERT INTO city(parent to zipcode)
INSERT INTO zipcode
4

1 に答える 1

0

こんにちは、手順を完了するには、seqno intのような列をもう1つ保持し、seqnoを親の子レベルで更新する必要があります。ステートメント列からテーブル名を読み取り、SQLサーバーから親の子レベルを見つけるのは非常に難しいので、そのテーブルにseqnoがあると仮定すると、次のようにprocを記述できます。

 DECLARE @table table (statements varchar(200),id int,seqno int)
INSERT INTO @table 
values('INSERT INTO country(parent to state)',1,1),
 ('INSERT INTO state(parent to city)',2,2),
 ('INSERT INTO city(parent to zipcode)' ,3,3),
 ('INSERT INTO zipcode' ,4,4),
 ('update  city(parent to zipcode)' ,4,3),
 ('delete FROM country' ,7,1),
 ('delete FROM zipcode' ,6,4)
--- you can change below code to proc  u can write case statements if u want only inset or delete like that
DECLARE @outtable table(statements varchar(200),seqno int,id int iDENTITY(1,1))
INSERT INTO @outtable
SELECT  statements,seqno FROM @table WHERE statements like '%insert%' ORDER BY seqno   ASC
INSERT INTO @outtable
SELECT  statements,seqno FROM @table WHERE statements like '%update%' ORDER BY seqno ASC
INSERT INTO @outtable
SELECT  statements,seqno FROM @table WHERE statements like '%delete%' ORDER BY seqno     DESC
SELECT   * FROM @outtable order by id asc
于 2012-10-17T00:05:30.750 に答える