【发布时间】:2016-03-28 00:50:57
【问题描述】:
我正在处理一个查询并创建了一个函数来使用以下代码从outcomes 表中获取结果。
CREATE FUNCTION dbo.Shippad (@tbl NVARCHAR(30))
RETURNS TABLE
AS
RETURN
SELECT LEFT(ship, Charindex(' ', ship) - 1) + ' '
+ Replicate('*', Charindex(' ', Substring(ship, Charindex(' ', ship) + 1, Len(ship))) + 1 -2)
+ ' '
+ Reverse(LEFT(Reverse(ship), Charindex(' ', Reverse(ship)) - 1)) as final_work
FROM outcomes
WHERE Charindex(' ', Substring(ship, Charindex(' ', ship) + 1, Len(ship))) > 1
上面代码的问题是我在执行过程中输入了什么参数都没有关系,只要我输入的参数是数据库中有效的表名,它总是给出结果。
现在我想知道是否可以创建一个参数来将表名输入到FROM 部分,这样只有当我输入outcomes 时才会显示结果。
我尝试使用以下代码声明一个表变量:
declare @ship_outcome table
( final_work nvarchar(30)
)
insert into @ship_outcome (final_work)
select
left(ship, charindex(' ', ship) - 1) + ' ' +
replicate('*', charindex(' ', substring(ship, charindex(' ', ship) + 1, len(ship))) + 1 -2) + ' ' +
reverse(left(reverse(ship), charindex(' ', reverse(ship)) - 1))
from outcomes
where charindex(' ', substring(ship, charindex(' ', ship) + 1, len(ship))) > 1;
select * from @ship_outcome
但是我不确定如何将表变量合并到 UDF 中。请帮忙。
【问题讨论】:
-
不清楚。您是否只想在
@tbl = outcomes时获得结果? -
添加到
WHERE' clauseAND @tbl = '结果'` -
在这种情况下,我建议你不要自己调用这个函数
-
@Prdp 是的,我打算仅在
@tbl = outcomes时显示结果。顺便说一句,感谢您昨天提供的查询,这正是 UDF 创建的查询。
标签: sql sql-server tsql udf table-variable