2009-04-15 9 views
0

Ich habe eine Tabelle mit einem ganzen Namen. Ich habe eine Funktion, die diesen Namen empfängt, analysiert und eine Tabelle mit dem ersten, mittleren, letzten und Suffix zurückgibt. Ich habe einen bad (edit: war „hyper-konservativ“) DBA wer den Dev-Server auf die gleiche Version wie die Produktion nicht ein Upgrade ein so kann ich nicht nur GILT verwenden und mit ihm getan werden:Join mit Tabellenwertfunktion in 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 

Bitte helfen, oder ich werde gezwungen sein, Code wie folgt zu schreiben:

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

Warum nicht posten, wie Ihre Syntax 2005 aussehen würde? Das kann mehr Antworten bekommen. –

+0

Dev sollte Produktion übereinstimmen. Zeitraum. –

+0

Ein hyper-konservativer DBA würde zuerst Dev aktualisieren ... – gbn

Antwort

0

würden Sie in der Lage sein, sich mit der UDF verbinden, wenn sie keine Daten von der anderen Tabelle verarbeitet. Das heißt, können Sie schreiben:

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

aber nur, weil myFunc verweist keine Felder in tb1. Dafür wurde APPLY entwickelt.

So wie ich es sehe, haben Sie drei Möglichkeiten:

  1. Ihre Insert-Anweisung mit einer Funktionsreferenz pro Feld
  2. Ein Cursor über die Ergebnismenge, so kann die Funktion auf einem eine Zeile aufgerufen werden Zeit
  3. Finden Sie einen Weg, um die Entwicklungsumgebung synchron mit der Produktion zu bekommen, bis hin zu einem besseren DBA.
0

Es klingt wie „dev“ und „leben“ verschiedene Versionen verwenden? Wenn Sie nicht dasselbe Produkt auf Ihren Entwicklungs-/Produktionsservern verwenden, ist eine Haftung. Eine „konservative“ DBA sollte sie wollen ... Ich bin unklar

passen - sind Sie die Funktion zu schreiben, dass „eine Tabelle zurückgibt mit ersten, mittleren, zuletzt, und das Suffix“ oder es raubend . Wenn Sie raubend es sind, sollten Sie nur in der Lage sein zu SELECT von der UDF oder JOIN es usw. IIRC, die Sie gerade alias die UDF als würden Sie eine Tabelle:

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

Da war ursprünglich etwas anderes als 'konservativ', aber es war unpassend und ich habe es geändert. Die Tabellenwertfunktion nimmt eines der Felder aus der Tabelle als Argument an: 'select * from parseName (b.name) ein innerer Join nameTable b auf a.name = b.wholeName' Funktioniert nicht. –

+0

Sind Sie sicher, dass das eine Tabellenfunktion ist? Klingt eher nach einer Skalarfunktion für mich ... –

+0

Ich habe meiner Frage einen weiteren Code hinzugefügt, der hoffentlich klarstellen wird. –

Verwandte Themen