2009-04-15 3 views
0

У меня есть таблица с целым именем. У меня есть функция, которая получает указанное имя, анализирует его и возвращает таблицу с первым, средним, последним и суффиксом. У меня есть bad (редактирование: был «гипер-консервативный») DBA, который не будет обновлять сервер Dev к той же версии, как производство один, так что я не могу просто использовать ОТНОСИТЬСЯ и сделать с ним:Подключиться к табличной функции в MSSQL 2000?

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

Почему бы не написать, как будет выглядеть ваш синтаксис 2005 года? Это может получить больше ответов. –

+0

Дев должен соответствовать производству. Период. –

+0

Гиперконсервативный администратор баз данных обновит dev первым ... – gbn

ответ

0

Вы могли бы присоединиться к UDF, если он не обрабатывает данные из другой таблицы. То есть, вы можете написать это:

select name, b.EXPANSION 
    from employees a 
    join dbo.parseName('John Smith') b 
    on a.CODE = b.CODE 

, но только потому, что myFunc не ссылается ни на какие поля в tb1. Именно для этого была создана APPLY.

Как я понимаю, у вас есть три варианта:

  1. Вашего заявление вставки одной ссылки функции на поле
  2. курсора над результирующим набором, так что функция может быть вызвана одной строки время
  3. Найдите способ синхронизации среды разработки с производством, вплоть до получения лучшего администратора базы данных.
0

это звучит как «разработчик» и «жить» использовать разные версии? Не использование одного и того же продукта на ваших серверах dev/production является обязательством . «Консервативный» DBA должен хотеть их, чтобы соответствовать ...

Я неясна - ты писать функции, которая «возвращает таблицу с первым, средним, последним, и суффиксом», или потребляя его , Если вы потребляя, вы просто должны быть в состоянии SELECT из UDF, или JOIN к нему и т.д. IIRC, вы просто псевдоним ОДС, как вы бы таблица:

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

Там было что-то другое, кроме «консервативного», но это было неуместно, и я изменил его. Функция table-value принимает одно из полей из таблицы в качестве аргумента: 'select * from parseName (b.name) внутреннее имя joinTable b на a.name = b.wholeName' Не работает. – 2009-04-15 15:24:00

+0

Вы уверены, что ** это функция с табличной оценкой? Звучит скорее как скалярная функция для меня ... –

+0

Я добавил еще один код, переуточенный на мой вопрос, который, я надеюсь, прояснит это. – 2009-04-15 16:34:06