Вы можете сделать это одним оператором UPDATE:
UPDATE transactions SET
transaction_name1 = Replace(transaction_name1,'''',''),
transaction_name2 = Replace(transaction_name2,'''','')
... (and so on)
Это, вероятно, улучшит производительность, если приблизится к коэффициенту, равному 5.
Edit:
Поскольку это одна вещь в огромном наборе данных (90MM строк), я предлагаю добавить предложение where и запускать его партиями.
Если у ваших транзакций есть первичный ключ, разделите обновления на нем, выполнив, возможно, 500 тыс. За один раз.
Делайте это в цикле с явными транзакциями, чтобы свести использование журнала к минимуму:
DECLARE @BaseID INT, @BatchSize INT
SELECT @BaseID = MAX(YourKey), @BatchSize = 500000 FROM transactions
WHILE @BaseID > 0 BEGIN
PRINT 'Updating from ' + CAST(@BaseID AS VARCHAR(20))
-- perform update
UPDATE transactions SET
transaction_name1 = Replace(transaction_name1,'''',''),
transaction_name2 = Replace(transaction_name2,'''','')
-- ... (and so on)
WHERE YourKey BETWEEN @BaseID - @BatchSize AND @BaseID
SET @BaseID = @BaseID - @BatchSize - 1
END
Другое примечание:
Если кавычки не должны появляться в ваших данных, вы можете создать проверочное ограничение , чтобы не допустить их. Это последнее усилие, так как любое приложение, пытающееся поместить их, должно будет обработать исключение базы данных, но оно сохранит ваши данные в чистоте. Нечто подобное может сделать это:
ALTER TABLE transactions
ADD CONSTRAINT CK_NoQuotes CHECK(
CHARINDEX('''',transaction_name1)=0 AND
CHARINDEX('''',transaction_name2)=0 AND
-- and so on...
)