Присоединиться к табличной функции в MSSQL 2000? - PullRequest
0 голосов
/ 15 апреля 2009

У меня есть таблица с полным именем. У меня есть функция, которая получает указанное имя, анализирует его и возвращает таблицу с первым, средним, последним и суффиксом. У меня есть bad (правка: был "гиперконсервативен") администратор базы данных, который не будет обновлять сервер разработки до той же версии, что и производственный, поэтому я не могу просто использовать 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  

Ответы [ 2 ]

0 голосов
/ 22 апреля 2009

Вы сможете присоединиться к 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 голосов
/ 15 апреля 2009

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

Мне неясно - вы пишете функцию, которая "возвращает таблицу с первым, средним, последним и суффиксом", или потребляет ее. Если вы потребляете его, вы просто должны иметь возможность SELECT от UDF или JOIN к нему и т. Д. IIRC, вы просто используете псевдоним UDF, как для таблицы:

...
from dbo.myTableUdf(...) x
inner join SomeTable y on x.id = y.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...