0

selectステートメントが返す結果を削除したいのですが、これを行う理由は、テーブル間に関係があり、最上位のテーブルから削除する場合は、他のテーブルの子行も削除する必要があるためです。

誰かが私のためにこのストアドプロシージャを修正できますか?

ALTER proc [dbo].[storedprocname] 
    (@Parameter uniqueidentifier = '00000000-0000-0000-0000-000000000000')
AS BEGIN
    DELETE FROM TableOne 
    WHERE IDOne IN
        (SELECT
           IDOne,
           DescOne, IndexOne,
           IDTwo,
           QuestionTwo, ControlTypeTwo, IndexTwo,
           IDThree,
           DescThree, IndexThree,
           QuestionFour,
           OptionFour
    FROM
           TableOne
        INNER JOIN 
           TableTwo ON TableTwo.CatID = TableOne.IDOne
        INNER JOIN 
           TableThree ON TableThree.Question = TableTwo.IDTwo
        LEFT OUTER JOIN
           TableFour ON TableFour.Question = TableThree.IDThree
        WHERE
           TableOne.IDOne = @Parameter)
END
4

2 に答える 2

1
ALTER proc [dbo].[storedprocname] 
  (@Parameter uniqueidentifier = '00000000-0000-0000-0000-000000000000')
AS BEGIN
  DELETE FROM TableOne 
    WHERE IDOne IN
      (SELECT
         IDOne
       FROM
         TableOne
       INNER JOIN 
         TableTwo ON TableTwo.CatID = TableOne.IDOne
       INNER JOIN 
         TableThree ON TableThree.Question = TableTwo.IDTwo
       LEFT OUTER JOIN
         TableFour ON TableFour.Question = TableThree.IDThree
       WHERE
         TableOne.IDOne = @Parameter)
END
于 2013-02-28T10:17:54.867 に答える
1

IDOne可能な値のリストにあるすべての行を削除したいので、後のサブクエリも比較に使用できる単一の列IN (...)を返すようにする必要があります! 結局のところ、現在返されている列のリスト全体と単一の値を比較することはできません....IDOne

次のようなことを試してください:

ALTER proc [dbo].[storedprocname] 
    (@Parameter uniqueidentifier = '00000000-0000-0000-0000-000000000000')
AS BEGIN
    DELETE FROM TableOne 
    WHERE IDOne IN
        (SELECT
           IDOne
         FROM
           TableOne
        INNER JOIN 
           TableTwo ON TableTwo.CatID = TableOne.IDOne
        INNER JOIN 
           TableThree ON TableThree.Question = TableTwo.IDTwo
        LEFT OUTER JOIN
           TableFour ON TableFour.Question = TableThree.IDThree
        WHERE
           TableOne.IDOne = @Parameter)
END

サブクエリ内のすべてのものが本当に必要かどうかはわかりません(あなたの質問は漠然としていて十分に明確ではありませJOINん....要件に合わせて微調整する必要があるかもしれません。

于 2013-02-28T10:18:30.020 に答える