加入MSSQL 2000中的表值函数?

时间:2009-04-15 14:42:06

标签: sql function

我有一个全名的桌子。我有一个函数接收所述名称,解析它,并返回一个包含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  

2 个答案:

答案 0 :(得分:0)

听起来像“dev”和“live”使用不同的版本?在您的开发/生产服务器上不使用相同的产品是责任。 “保守”的DBA应该希望它们匹配......

我不清楚 - 您是否编写“返回带有第一个,中间,最后和后缀的表”或消费的函数。如果您正在使用它,您应该只能从UDF SELECTJOIN到它等等.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的创建原因。

我看到它的方式,你有三个选择:

  1. 每个字段带有一个函数引用的insert语句
  2. 将光标放在结果集上,这样可以一次调用一行
  3. 找到一种让开发环境与制作同步的方法,包括获得更好的DBA。