以下を格納するテーブルがあります。
JobID
ValidationItemID
CreatedBy
このテーブル(事前定義されたテンプレート)に挿入できるようにしたいのですが、存在しない行のみを追加します。存在しないということは、JobIDとValidationItemIDの組み合わせによって行が一意になることを意味します。プロシージャはJobIDを渡しますが、この列をテンプレートの一部としてプルするため、検証アイテムIDを渡すことができません...
この効果への何か:
CREATE PROCEDURE insTemplate
@JobID varchar(50),
@Login varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO
ValidationItemSignOff
(
JobID,
ValidationItemID,
CreatedBy
)
SELECT
DISTINCT
@JobID,
vi.ValidationItemID,
@Login
FROM
RunOffAnswer roa
INNER JOIN
Method m ON m.MethodID = roa.MethodID
INNER JOIN
RunOffValidationItem vi ON vi.ValidationItemID = m.ValidationItemID
WHERE
vi.Inactive=0
AND NOT EXISTS(SELECT * FROM ValidationItemSignOff WHERE JobID=@JobID AND vi.ValidationItemID ???
END
GO
同じJobIDとValidationItemIDが再挿入されないように、where条件を表現する方法がわかりません。私がテーブルの中にいるとしましょう:
Job ValidationItem
Job A 1
Job A 2
Job A 5
そして、私は次のテンプレートを持っています:
ValidationItem
1
2
3
4
5
6
ストアドプロシージャを実行すると、ジョブIDの値3,4,6のみがテンプレートテーブルから挿入されるはずです...したがって、where条件についてサポートが必要です。
私の問題は使用できないことだと思いますNOT EXISTS
。おそらく、このValidationItemSignOffテーブル自体に再度参加する必要があり、JobID
NULLは次のようになります。ValidationItemID
ValidationItemID
CREATE PROCEDURE insTemplate
@JobID varchar(50),
@Login varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO
ValidationItemSignOff
(
JobID,
ValidationItemID,
CreatedBy
)
SELECT
DISTINCT
@JobID,
vi.ValidationItemID,
@Login
FROM
RunOffAnswer roa
INNER JOIN
Method m ON m.MethodID = roa.MethodID
INNER JOIN
RunOffValidationItem vi ON vi.ValidationItemID = m.ValidationItemID
RIGHT OUTER JOIN
ValidationItemSignOff viso ON viso.JobID = @JobID
AND viso.ValidationItemID = vi.ValidationItemID
WHERE
vi.Inactive=0
AND viso.ValidationItemID IS NULL
END
GO
わかったと思う
右の結合をこれに置き換える:
LEFT JOIN
ValidationItemSignOff viso
ON viso.JobID = @JobID
AND viso.ValidationItemID = vi.ValidationItemID