私のコードに何か問題がありますか?私は例外を受け取ります:SQL Serverの実行タイムアウトが満了しました
実行時間が切れました。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。
私は、ユーザー
ALTER PROCEDURE SP_UPDATE_FACILITY
@featid int,
@facilityid int,
@updatetbl as TABLE_UPDATE_FACILITYDETAILS READONLY
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tblname AS NVARCHAR(255);
SET @tblname = (SELECT dbo.FNC_Search_GetSearchTable(@facilityid));
DECLARE @key varchar(255);
DECLARE @value varchar(255);
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR FOR
SELECT col_key, col_value FROM @updatetbl
OPEN @MyCursor
FETCH NEXT FROM @MyCursor INTO @key , @value
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@key != '' and @value != '')
BEGIN
BEGIN TRY
SET @value = (CAST (@value AS varchar(255)));
END TRY
BEGIN CATCH
SET @value = (CAST (@value AS float));
END CATCH;
DECLARE @sSQL NVARCHAR(500);
SET @sSQL = 'UPDATE ' + QUOTENAME(@tblname) + ' SET ' + QUOTENAME(@key) + ' = @value WHERE FEATID = @featid'
EXEC sp_executesql @sSQL , N'@value VARCHAR(255), @featid INT', @key, @featid
FETCH NEXT FROM @MyCursor INTO @key, @value
END
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END
GO
の検索機能に応じて、動的な列と動的テーブルを更新しようとしているテーブルの行をループする方法はあります、テーブルの行ごとの値を取得
サイドノート: **ではなく**あなたのストアドプロシージャのために 'sp_'プレフィックスを使います。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –
@Valueは既にvarchar(255)ですが、なぜそれをvarchar(255)にキャストしますか? 列ごとに更新ステートメントを使用する代わりに、すべての列を一度に更新することができます。 – Peter