Ich habe die folgende SQL Server gespeicherte Prozedur:Gespeicherte Prozedur friert Funktion aufrufen
ALTER PROCEDURE [dbo].[stg_GetFileDetails]
@file_name AS NVARCHAR(255),
@remove_dots AS BIT
AS
BEGIN
SET NOCOUNT ON;
IF (@remove_dots = 1)
BEGIN
SELECT
o.r_object_id,
'' AS [DAP ID],
p.nhs_patientid AS [MRN],
p.nhs_firstname AS [First Name],
p.nhs_surname AS [Surname],
o.object_name AS [File Name]
FROM
dm_sysobject_s o
INNER JOIN
nhs_instance_audit_s a ON o.r_object_id = a.r_object_id
INNER JOIN
nhs_patient_document_s d ON d.r_object_id = a.dia_edms_document_id
INNER JOIN
nhs_patient_s p ON d.nhs_patdoc_patientid = p.nhs_patientid
WHERE
[dbo].[No_dots_filename](o.object_name) = @file_name
END
ELSE
BEGIN
SELECT
o.r_object_id,
'' AS [DAP ID],
p.nhs_patientid AS [MRN],
p.nhs_firstname AS [First Name],
p.nhs_surname AS [Surname],
o.object_name AS [File Name]
FROM
dm_sysobject_s o
INNER JOIN
nhs_instance_audit_s a ON o.r_object_id = a.r_object_id
INNER JOIN
nhs_patient_document_s d ON d.r_object_id = a.dia_edms_document_id
INNER JOIN
nhs_patient_s p ON d.nhs_patdoc_patientid = p.nhs_patientid
WHERE
o.object_name = @file_name
END
Nun ist diese funktioniert gut, wenn @remove_dots
falsch ist, aber wenn es wahr ist, es die folgende Funktion aufruft:
ALTER FUNCTION [dbo].[No_dots_filename]
(@file_name AS NVARCHAR(255))
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @revised_filename AS NVARCHAR(255)
DECLARE @ext AS NVARCHAR(5)
IF (LEN(@file_name) > 4)
BEGIN
-- see if the extension is a traditional 3 character one
IF SUBSTRING(@file_name, LEN(@file_name) - 4, 1) = '.'
BEGIN
SET @ext = RIGHT(@file_name, 4)
END
ELSE -- otherwise it might be one of the 4 character extensions like .docx
BEGIN
SET @ext = RIGHT(@file_name, 5)
END
-- remove dots from the main filename and then replace the extension
SET @revised_filename = REPLACE(LEFT(@file_name, LEN(@file_name) - LEN(@ext)), '.', '') + @ext
END
ELSE
BEGIN
SET @revised_filename = @file_name
END
RETURN @revised_filename
END
Die gespeicherte Prozedur friert ein oder dauert mindestens so lange, dass es keinen Unterschied macht.
Irgendwelche Vorschläge, wie man das besser codiert?