与功能使用变量 - SQL
我有自定义函数返回一个表 它接受两个VARCHAR处理,它分裂基础上的分隔符与功能使用变量 - SQL
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
如何让没有工作的情况下工作的VARCHAR。
的错误,我得到它 附近有语法错误。“。
使用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
SELECT * FROM tablesxx c,tableyyy y CROSS APPLY(SELECT TOP 1 VALUE FROM dbo.Split(x.abc,'_') )f WHERE x.abc LIKE f.value 'APPLY'附近语法不正确。 附近有语法错误。“。 – user1178514 2012-02-07 11:45:18
@ user1178514 - 我已经错过了一个')'。答案已被纠正。 – 2012-02-07 12:26:19
非常感谢。它适用于现在..CROSS应用程序不工作,因为我在SQL SERVER 2000 ...所以我用另一种方法,你appraently你建议http://stackoverflow.com/questions/4644740/cross-apply-does-not-work -with-sql-server-2000 – user1178514 2012-02-07 13:33:19
你尝试过:
select abc
from abcd a, cde b
where a.abc like dbo.Split(b.abc,'_')
当我像这样调用它时,函数返回一个表,它会抛出无效的对象名称错误。 – user1178514 2012-02-07 11:24:04
虽然调用select * from dbo.Split('xxx_xx','_')works – user1178514 2012-02-07 11:24:56
我敢肯定,你的意思是问一个问题,以及...? – 2012-02-07 11:19:17
什么是从B表ABC的列类型? – 2012-02-07 11:20:31
@MikaelEriksson他想知道为什么这种情况下不工作,检查的意见。 – 2012-02-07 11:20:49