2016-05-03 1 views
1

SQL Server Management Studioを使用して、バルクデータをデータベーステーブルの1つに挿入しています。現在、データベースに送信されるデータがテーブル内の特定の行に追加される位置にあります(これはストアドプロシージャによって制御されます)。私たちが探しているのは、操作が完了する前にタイムアウトが発生していることです。この時点では、whileループのために操作が遅いと思っていますが、より高速な同等の方法にアプローチする方法はわかりません。 @nonexistingTblCountテーブル@nonexistingTbl内部行の総数であるSQLを使用したバルクデータの追加/更新

-- Insert statements for procedure here 
WHILE @i < @nonexistingTblCount 
BEGIN 
    Insert into AlertRanking(MetricInstanceID,GreenThreshold,RedThreshold,AlertTypeID,MaxThreshold,MinThreshold) 
    VALUES ((select id from @nonexistingTbl order by id OFFSET @i ROWS FETCH NEXT 1 ROWS ONLY), @greenThreshold, @redThreshold, @alertTypeID, @maxThreshold, @minThreshold) 

    set @id = (SELECT ID FROM AlertRanking 
    WHERE MetricInstanceID = (select id from @nonexistingTbl order by id OFFSET @i ROWS FETCH NEXT 1 ROWS ONLY) 
    AND GreenThreshold = @greenThreshold 
    AND RedThreshold = @redThreshold 
    AND AlertTypeID = @alertTypeID); 

    set @i = @i + 1; 
END 

@nonexistingTblテーブルは以前に宣言されており、テーブルに追加するすべての値を含んでいます。

+0

ここで@idパラメータを使用していますか? – mikey

答えて

1

ループを使用する代わりに、すべてのレコードを1つのステートメントで挿入できる必要があります。

INSERT INTO AlertRanking(MetricInstanceID,GreenThreshold,RedThreshold,AlertTypeID,MaxThreshold,MinThreshold) 
SELECT id, @greenThreshold, @redThreshold, @alertTypeID, @maxThreshold, @minThreshold FROM @nonexistingTbl ORDER BY id 
関連する問題