2016-04-06 8 views
0

私はストアドプロシージャを作成しました。フィルタレコードとSQ​​L ServerのIDの配列で行を挿入

CREATE PROCEDURE [dbo].[ProcCustomOrderHoursTaskLog](@WorkLogIds nvarchar(MAX) = null, --a list of worklog IDs (comma-separated list). e.g. 1,2,3 @BatchId int = 0) 

テーブルCustomOrderHoursTaskLog私にはWorkLogIdという列があります。

ストアドプロシージャは@WorkLogIdsをフィルタリングする必要があります。 @WorkLogIdsの配列から、指定されたIDがCustomOrderHoursTaskLogテーブルにある場合は、何もしなくてもかまいません。

しかし、IDがCustomOrderHoursTaskLogテーブルで終了しない場合は、CustomOrderHoursTaskLogテーブルに行を挿入する必要があります。私はCustomOrderHoursTaskLogテーブルですべての@WorkLogIdsを1つずつチェックしたいと思います。私がしなければならないこと。ループかもしれない。私はあなたがより具体的にする必要があると思うが、私はあなたが望むものを得た場合、私に

+0

どこに問題がありますか?私はあなたが直面した障害の説明は見ません。 – cassandrad

+0

@cassandradied私は編集した質問があります。これをチェックしてください。あなたが私を助けることができる今見てみましょう。 –

答えて

0

を助けてください:

CREATE PROCEDURE INSERT_EMPLOYEES 
    @INIT_ID INT, 
    @END_ID INT 

    AS 
    BEGIN 

     CREATE TABLE #ARRAY (ID INT) 

     WHILE @INIT_ID <= @END_ID 
     BEGIN 
      INSERT INTO #ARRAY VALUES(@INIT_ID) 
      SET @INIT_ID = @INIT_ID + 1 
     END 

     INSERT INTO EMPLOYEE 
     SELECT ID FROM #ARRAY A 
     WHERE NOT EXISTS (SELECT ID FROM EMPLOYEE WHERE ID = A.ID) 

    END 

、それを実行する(例):

EXEC INSERT_EMPLOYEES 1, 10 
0
ALTER PROCEDURE [dbo].[ProcCustomOrderHoursTaskLog](
@WorkLogIds nvarchar(MAX) = null, --a list of worklog IDs (comma-separated list). e.g. 1,2,3 
@BatchId int = 0 
) 

AS BEGIN - 作業ログIDによるフィルタ

SET @WorkLogIds = isnull(@WorkLogIds, '') 
    CREATE TABLE #FilteredWorkLogIds 
    (
     WorkLogId int not null 
    ) 
    INSERT INTO #FilteredWorkLogIds (WorkLogId) 
    SELECT CAST(data as int) FROM [nop_splitstring_to_table](@WorkLogIds, ',') 
    DECLARE @WorkLogIdsCount int  
    SET @WorkLogIdsCount = (SELECT COUNT(1) FROM #FilteredWorkLogIds) 
INSERT INTO CustomOrderHoursTaskLog (WorkLogId, CustomOrderId, IsOrderGenerated, CreatedOnUtc, GeneratedOnUtc, BatchId) 
SELECT WorkLogId, 0, 0, getdate(), null, @BatchId FROM #FilteredWorkLogIds W 
WHERE NOT EXISTS (SELECT * FROM CustomOrderHoursTaskLog WHERE WorkLogId = W.WorkLogId) 
DROP TABLE #FilteredWorkLogIds 

終了

関連する問題