16 Stimmen

Wie kann ich ein einfaches berechnetes Feld in SQL Server einrichten?

Ich habe eine Tabelle mit mehreren Kontofeldern wie diesem:

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

Ich muss sie oft auf diese Weise kombinieren:

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

Ich hätte gerne ein berechnetes Feld, das dies automatisch tut, so dass ich einfach sagen kann:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

Wie lässt sich dies am besten bewerkstelligen?

Ich verwende SQL Server 2005.

27voto

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

Dadurch wird eine berechnete Spalte beibehalten und kann bei Selects besser funktionieren als eine Berechnung in einer Ansicht oder UDF, wenn Sie eine große Anzahl von Datensätzen haben (sobald die anfängliche Erstellung der Spalte erfolgt ist, was schmerzhaft langsam sein kann und wahrscheinlich zu Zeiten geringer Nutzung erfolgen sollte). Es verlangsamt Einfügungen und Aktualisierungen. Normalerweise wird eine langsame Einfügung oder Aktualisierung von den Benutzern besser toleriert als eine Verzögerung bei einem Select, es sei denn, es treten Probleme mit Sperren auf.

Welche Methode am besten geeignet ist, hängt stark von Ihrer Nutzung und der benötigten Leistung ab. Wenn Sie nicht viele Datensätze haben oder die berechnete Spalte nicht so häufig aufgerufen wird, sollten Sie keine persistierte Spalte verwenden. Wenn Sie jedoch häufig Berichte mit allen Datensätzen für das Jahr oder andere große Datensätze ausführen, ist die persistierte berechnete Spalte möglicherweise besser für Sie geeignet. Wie bei jeder Aufgabe dieser Art können Sie nur durch Testen herausfinden, was in Ihrer Situation am besten funktioniert.

8voto

p.campbell Punkte 94960

Dies ist ein großartiger Kandidat für einen View.

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

5voto

Remus Rusanu Punkte 280155
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

die Spalte nicht in der Tabelle gespeichert ist, wird jedes Mal, wenn Sie auf sie verweisen, neu erstellt. Das gleiche Ergebnis können Sie mit einem View erzielen. Wenn Sie Filterprädikate oder Ordnungsbegriffe für die berechnete Spalte verwenden und ihr einen Index hinzufügen möchten, siehe Erstellen von Indizes auf berechneten Spalten .

3voto

DavidStein Punkte 3077

Nun, Sie könnten eine Ansicht der Tabelle ACCOUNT_TABLE erstellen und diese abfragen. Oder Sie könnten eine benutzerdefinierte Funktion erstellen, die dasselbe leisten würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X