我有一个全名的桌子。我有一个函数接收所述名称,解析它,并返回一个包含first,middle,last和suffix的表。我有一个bad
(编辑:是“超级保守”)DBA谁不会将开发服务器升级到与生产服务器相同的版本,所以我不能只使用APPLY并完成它:< / p>
insert into blah (name, firstName, middleName, lastName, suffix)
select a.name, b.firstName, b.middleName, b.lastName, b.suffix
from employees a CROSS APPLY dbo.parseName(a.name) b
请帮助,否则我将被迫编写如下代码:
insert into blah (name, firstName, middleName, lastName, suffix)
select
name, dbo.getNamePart(name, 'f') as firstName,
dbo.getNamePart(name, 'm') as middleName,
dbo.getNamePart(name, 'l') as lastName,
dbo.getNamePart(name, 's') as suffix
from employees r
答案 0 :(得分:0)
听起来像“dev”和“live”使用不同的版本?在您的开发/生产服务器上不使用相同的产品是责任。 “保守”的DBA应该希望它们匹配......
我不清楚 - 您是否编写“返回带有第一个,中间,最后和后缀的表”或消费的函数。如果您正在使用它,您应该只能从UDF SELECT
或JOIN
到它等等.IIRC,您只需将UDF别名,就像您一样表:
...
from dbo.myTableUdf(...) x
inner join SomeTable y on x.id = y.id
答案 1 :(得分:0)
如果UDF不处理来自其他表的数据,您将能够加入UDF。也就是说,你可以这样写:
select name, b.EXPANSION
from employees a
join dbo.parseName('John Smith') b
on a.CODE = b.CODE
但仅仅是因为myFunc没有引用tb1中的任何字段。这就是APPLY的创建原因。
我看到它的方式,你有三个选择: