将变量与函数-SQL一起使用

将变量与函数-SQL一起使用,sql,sql-server-2008,sql-server-2005,user-defined-functions,Sql,Sql Server 2008,Sql Server 2005,User Defined Functions,我有一个自定义函数,返回一个表 它接受两个varchar,它根据delimeter分割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 lik

我有一个自定义函数,返回一个表 它接受两个varchar,它根据delimeter分割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
如何使不起作用的案例起作用

我明白了 “.”附近的语法不正确。

您是否尝试过:

select abc 
from abcd a, cde b 
where a.abc like dbo.Split(b.abc,'_')
使用允许将变量用作函数的参数

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

APPLY运算符允许您为调用表值函数 查询的外部表表达式返回的每一行

测试脚本


我肯定你也想问一个问题…?表b中abc的列类型是什么?@MikaelEriksson他想知道为什么这个案例不起作用,请检查注释。我们可以看看你的dbo代码吗。拆分函数如果你用一些导致错误的示例数据更新你的问题,并请添加错误消息,那会有所帮助。我猜您会得到类似子查询返回的值超过1的结果。。试着改变一下,比如说加入。它可能会执行您想要的操作。当我这样调用函数返回一个表时,它会抛出无效的对象名错误。SELECT*来自TABLEXX c,tableyyy y y CROSS APPLY SELECT TOP 1值来自dbo.Splitx.abc,其中x.abc类似于f.VALUE“APPLY”附近的语法不正确。“.”附近的语法不正确。@user1178514-我错过了一个。答案已更正。非常感谢。它现在可以工作了..交叉应用不起作用,因为我在SQL SERVER 2000上…所以我使用了另一种方法,您建议使用@user1178514-从您的问题中不清楚只返回了一个结果,但如果它对您有效,您可以将此标记为已回答,并对我的另一个答案进行投票:。见标记回答…不能升级…已经有那么多的声誉…最近加入
SELECT  *
FROM    abcd a
        , cde b        
        CROSS APPLY dbo.Split(b.abc, '_') f
WHERE   a.abc LIKE f.Value
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