使用带函数的变量 - SQL
Posted
技术标签:
【中文标题】使用带函数的变量 - SQL【英文标题】:Using Variable with function - SQL 【发布时间】:2012-02-07 11:14:26 【问题描述】:我有返回表格的自定义函数 它接受两个 varchar,它根据分隔符拆分 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
如何让不工作的案例发挥作用。
错误我明白了 '.' 附近的语法不正确。
【问题讨论】:
我确定你也想问一个问题...? 表b中abc的列类型是什么? @MikaelEriksson 他想知道为什么这种情况不起作用,请检查 cmets。 我们可以看看你的dbo.Split()
函数代码
如果您使用一些导致错误的示例数据更新您的问题,并且请添加错误消息,这将有所帮助。我猜你会得到类似“子查询返回超过 1 个值。”的东西。尝试将like
改为in
。它可能会做你想做的事。
【参考方案1】:
使用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 '附近的语法不正确申请'。 '.' 附近的语法不正确。 @user1178514 - 我错过了一个)
。答案已更正。
非常感谢。它现在可以工作了..CROSS APPLY 不起作用,因为我在 SQL SERVER 2000 上...所以我使用了另一种方法,显然您建议 ***.com/questions/4644740/…
@user1178514 - 从您的问题中不清楚只返回一个结果,但如果它对您有用,您可以将其标记为已回答并支持我的另一个答案:)。见How does accepting an answer works
标记为已回答...不能投票已经获得了那么高的声誉...最近加入【参考方案2】:
你试过了吗:
select abc
from abcd a, cde b
where a.abc like dbo.Split(b.abc,'_')
【讨论】:
当我这样调用该函数时,它会返回一个表,它会引发无效对象名称错误。以上是关于使用带函数的变量 - SQL的主要内容,如果未能解决你的问题,请参考以下文章