мне нужно обрезать количество строк в операторе отбора, поэтому вместо того, чтобы повторять несколько LTRIM (RTRIM («строка») вызывает, я создал простую функцию декоративную следующим образом:Почему выполнение скалярной функции приводит к операции «create function»?
create function dbo.trim(@String varchar(max))
returns varchar(max)
as
begin
return rtrim(ltrim(@String))
end
go
Однако, во время выполнение моего выбора (который вызывает функцию несколько раз) я запускаю следующее выбрать в отдельном окне, как ск:
SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
и соблюдайте следующие
TEXT session_id status command cpu_time total_elapsed_time
------------------------------------------------------------------
** 99 running SELECT 12045 12388
, где первый столбец (заменен ** выше для удобства чтения) содержит следующее:
create function dbo.trim(@String varchar(max))
returns varchar(max)
as
begin
return rtrim(ltrim(@String))
end
Могу ли я правильно интерпретировать это означает, что при вызове функции дифферента, что SQL Server фактически называет создание?
Как видно из приведенной выше таблицы, время выполнения довольно длительное, и в некоторых случаях я обнаружил, что операция create полностью зависает, блокируя завершение операций выбора и дальнейшей записи в базе данных таким образом, что я мне пришлось убить операцию.
Может ли кто-нибудь пролить свет на это?
Спасибо! Pab
Спасибо Мартину! Я подозревал, что это может быть так. Я немного больше гуглинга, и я понимаю, что вы имеете в виду. Что касается проблем с производительностью, я думаю, что я получаю их вкус из первых рук. Я просто использую подход rtrim (ltrim ('the string')). – Pablito
@Pablito yep - это не так много кода. –