хранимая процедура работает непрерывно в фоновом режиме - PullRequest
1 голос
/ 17 сентября 2011

Я использую один файл класса для обновления своих таблиц.Так как я вставляю или обновляю таблицы, и после каждого обновления или вставки я вызываю одну хранимую процедуру, чтобы сохранить последний обновленный идентификатор таблицы.Но как только эта хранимая процедура запускается, она никогда не освобождает ресурс.Это выполняется всегда в фоновом режиме.Почему это происходит и как я могу это остановить?Вот хранимая процедура: -

<code>
Create  procedure [dbo].[Updlastusedkey]<br>
                 (<br>
                   @tablename varchar(50)<br>
                 )<br>
as<br>
Begin<br>
DECLARE @sql varchar(300)<br>
SET @SQL='UPDATE   primarykeyTab   SET  lastKeyUsed = ISNULL(( SELECT Max(ID) from '+@tablename +'),1) WHERE Tablename='''+@tablename +''''<br>
print @SQL<br>
EXEC(@SQL)    </p>

<p>END 

Ответы [ 3 ]

4 голосов
/ 17 сентября 2011

У вас включена авто-фиксация?Я думаю, что implicit_transactions = OFF означает Auto Commit = ON в SQL Server.Если это не ваша операция обновления, возможно, не выполняется COMMIT для транзакции, которую она открыла, поэтому оставляем блокировку записи в таблице.В качестве альтернативы просто ЯВЛЯЮТСЯ, возможно, твоим обновлением.

0 голосов
/ 20 сентября 2011

Попробуйте это -

UPDATE   primarykeyTab   SET  lastKeyUsed = ISNULL(( SELECT Max(ID) from '+@tablename 
+' WITH (NOLOCK)),1) WHERE Tablename='''+@tablename +'''' WITH (NOLOCK) 
0 голосов
/ 17 сентября 2011

Почему бы вам просто не создать представление?

CREATE VIEW dbo.vPrimaryKeyTab
AS
    SELECT tablename = 'table1', MAX(id_column) FROM table1
    UNION
    SELECT tablename = 'table2', MAX(id_column) FROM table2
    /* ... */
;

Теперь вам не нужно ничего обновлять или запускать что-либо в фоновом режиме, и представление всегда будет обновляться (это не будет самый быстрый запрос в мире, но, по крайней мере, вы оплачиваете эту стоимость только тогда, когда вам нужна эта информация, а не постоянно ее обновляете).

...