Использование переменной с функцией - SQL - PullRequest
1 голос
/ 07 февраля 2012

У меня есть пользовательская функция, которая возвращает таблицу, она принимает два varchars, она разбивает varchar на основе разделителя

SELECT VALUE FROM dbo.Split('xxx','_') --- working

select abc from abcd a,cde b where a.abc like (SELECT VALUE FROM dbo.Split(b.abc,'_'))-- not working


select abc from abcd a,cde b where a.abc like (SELECT VALUE FROM dbo.Split('xx','_'))-- working

select abc from abcd a,cde b where a.abc like (SELECT b.abc)-- working

Как заставить работать нерабочее дело.

ОшибкаЯ получил неправильный синтаксис рядом с '.'.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Использование CROSS APPLY позволяет использовать переменную в качестве параметра функции.

SELECT abc
FROM   abcd a
       , cde b
       CROSS APPLY (select VALUE from dbo.Split(b.abc, '_')) f
WHERE  a.abc LIKE f.Value

или

SELECT  *
FROM    abcd a
        , cde b        
        CROSS APPLY dbo.Split(b.abc, '_') f
WHERE   a.abc LIKE f.Value

Оператор APPLYпозволяет вызывать табличную функцию для каждой строки, возвращаемой внешним табличным выражением запроса.

Тестовый сценарий

CREATE FUNCTION dbo.Split(@a VARCHAR(4), @b VARCHAR(4)) 
RETURNS TABLE 
AS RETURN
(
  SELECT Value = 'Test'  
)
GO

;WITH abcd (abc) AS (
  SELECT 'Test'
)
, cde (abc) AS (
  SELECT 'Test'
)  
SELECT  *
FROM    abcd a
        , cde b        
        CROSS APPLY (SELECT Value FROM dbo.Split(b.abc, '_')) f
WHERE   a.abc LIKE f.Value
0 голосов
/ 07 февраля 2012

вы пробовали:

select abc 
from abcd a, cde b 
where a.abc like dbo.Split(b.abc,'_')
...