我的代碼有問題嗎?我收到一個例外: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