У меня есть функция внутри хранимой процедуры, которая заставляет мой sql перейти от 1 секунды до 10-14 секунд. Может кто-то помочь мне объединить их в одну встроенную функцию, так что мой sql ускорится.SQL-функции для преобразования inline
INSERT INTO
#tempTable
SELECT DISTINCT
PRODUCT.name,
dbo.getProductTopImage(PRODUCT.name) as image
FROM
dbo.PRODUCT
getProductTopImage Функция
CREATE FUNCTION dbo.getProductTopImage
(
@PRODUCTNAME VARCHAR(255)
)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @IMAGE AS VARCHAR(255)
DECLARE @ID AS INT
SELECT TOP 1
@IMAGE = PRODUCT.image,
@ID = PRODUCT.id
FROM
PRODUCT
WHERE
PRODUCT.name = @PRODUCTNAME
IF @IMAGE IS NULL
BEGIN
SET @IMAGE = dbo.func_getImageRefs(@ID, 1)
END
RETURN @IMAGE
END
func_getImageRefs Функция
CREATE FUNCTION dbo.func_getImageRefs
(
@ProductId AS INT,
@Place AS INT
)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @REF AS VARCHAR(20)
SET @REF = '0'
SELECT
@REF = PLANTIMAGE.imageRef
FROM PRODUCT
LEFT OUTER JOIN
dbo.PLANTIMAGE
ON
dbo.PRODUCT.hls = PLANTIMAGE.plantid
WHERE PRODUCT.id = @ProductId AND PLANTIMAGE.imageNum = @Place
RETURN @REF
END
Итак, при замене 'SELECT @IMAGE = PLANTIMAGE.imageRef' с' SET @IMAGE = dbo.func_getImageRefs (@ID, 1) 'время выполнения увеличивается? – Bulat
Не пожалеете, если я удаляю «dbo.getProductTopImage (PRODUCT.name) как изображение» из хранимой процедуры и заменяю что-то вроде «« как изображение », оно переходит на 1 секунду для запуска. Вышеупомянутая сохраненная процедура - это всего лишь фрагмент большого запроса, но это означает, что эта функция вызывает замедление. –
. Пока неясно, где находится версия, которая занимает больше времени. – Bulat