连接到MSSQL 2000中的表值函数?

连接到MSSQL 2000中的表值函数?,sql,function,Sql,Function,我有一张全名的桌子。我有一个函数,它接收所说的名称,解析它,并返回一个带有first、middle、last和后缀的表。我有一个坏的(编辑:是“超保守的”)DBA,他不会将开发服务器升级到与生产服务器相同的版本,因此我不能只使用APPLY并完成它: insert into blah (name, firstName, middleName, lastName, suffix) select a.name, b.firstName, b.middleName, b.lastName, b.suff

我有一张全名的桌子。我有一个函数,它接收所说的名称,解析它,并返回一个带有first、middle、last和后缀的表。我有一个
坏的
(编辑:是“超保守的”)DBA,他不会将开发服务器升级到与生产服务器相同的版本,因此我不能只使用APPLY并完成它:

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  
听起来“dev”和“live”使用不同的版本?在开发/生产服务器上不使用相同的产品是一种责任。一个“保守”的DBA应该希望他们匹配

我不清楚-您是在编写“返回一个带有第一、中间、最后和后缀的表”的函数,还是在使用它。如果您正在使用它,您应该能够
从UDF中选择
,或者
加入它,等等。IIRC,您只需将UDF别名为一个表:

...
from dbo.myTableUdf(...) x
inner join SomeTable y on x.id = y.id

如果UDF没有处理来自另一个表的数据,您将能够加入到UDF。也就是说,你可以这样写:

select name, b.EXPANSION
  from employees a
  join dbo.parseName('John Smith') b
    on a.CODE = b.CODE
但这只是因为myFunc没有引用tb1中的任何字段。这就是创建APPLY的目的

在我看来,你有三个选择:

  • 每个字段有一个函数引用的insert语句
  • 结果集上的光标,以便每次调用一行函数
  • 找到使开发环境与生产同步的方法,包括获得更好的DBA

  • 为什么不发布一下你的2005语法呢?这可能会得到更多的响应。开发人员应该与生产环境相匹配。一个极度保守的DBA会首先升级开发人员…它最初是如何在生产中使用APPLY开发的?它不是。前一个团队对第二个代码片段(一遍又一遍地调用getNamePart)很满意,我正在尝试改进它。这里最初有一些不是“保守”的东西,但它不合适,我对它进行了修改。表值函数将表中的一个字段作为参数:
    select*from parseName(b.name)a.name=b.wholeName上的内部联接名table b不起作用。是否确实是表值函数?对我来说,听起来更像是一个标量函数……我在我的问题中添加了另一个截取的代码,希望能澄清这一点。