Frage

Ich habe eine Tabelle mit mehreren Account Felder wie folgt aus:

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

ich oft brauchen, um sie so zu kombinieren:

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE

ich ein berechnetes Feld mag, dass dies automatisch tut, so kann ich nur sagen:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

Was ist der beste Weg, dies zu tun?

Ich bin mit SQL Server 2005.

War es hilfreich?

Lösung

ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

Dies wird eine berechnete Spalte bestehen bleiben und in wählt als eine Berechnung im Hinblick oder UDF besser ausführen können, wenn Sie eine große Anzahl von Datensätzen haben (wenn die intial Schöpfung der Säule geschehen, die quälend langsam sein kann und sollte wahrscheinlich passieren während niedrige Nutzungszeiten). Es wird Einfügungen und Aktualisierungen verlangsamen. Normalerweise finde ich eine langsame Einfügung oder Aktualisierung wird besser toleriert wird von den Benutzern als eine Verzögerung in einem ausgewählten, wenn Sie Sperren Probleme bekommen.

Die beste Methode, dies zu tun wird sehr viel über Ihre Benutzung abhängen und welche Art von Leistung, die Sie benötigen. Wenn Sie nicht viele Platten haben oder wenn die berechnete Spalte nicht, die häufig aufgerufen wird, können Sie nicht eine persistente Spalte wollen, aber wenn Sie häufig von Berichten mit allen Datensätzen für das Jahr oder andere große Mengen ausgeführt werden Daten, können Sie die beharrte berechnete Spalte funktioniert besser für Sie. Wie bei jeder Aufgabe dieser Art, zu wissen, der einzige Weg, was in Ihrer Situation am besten funktioniert, ist zu prüfen.

Andere Tipps

Dies ist ein großer Kandidat für eine Ansicht.

CREATE VIEW vwACCOUNT_TABLE
AS

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER 
FROM ACCOUNT_TABLE

GO

--now select from the View
SELECT ACCT_NUMBER FROM  vwACCOUNT_TABLE
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

die Spalte in der Tabelle nicht beibehalten wird, wird on-the-cly jedes Mal, wenn Sie darauf verweisen, neu erstellt werden. Sie können mit dem Ziel, das gleiche Ergebnis erzielen. Wenn Sie Filter Prädikate oder Bestellung auf der berechneten Spalte verwenden und wollen einen Index hinzuzufügen auf sie a href sehen <= „http://msdn.microsoft.com/en-us/library/ms189292.aspx“ rel = „noreferrer“ > Erstellen von Indizes für berechnete Spalten .

Nun, Sie einen Blick auf die ACCOUNT_TABLE schaffen könnte und abfragen, dass. Oder ich glaube, Sie könnten eine benutzerdefinierte Funktion erstellen, die das Gleiche erreichen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top