Was ist der Zweck von system table master..spt_values ​​und was bedeuten seine Werte?


70

Was ist der Zweck von Systemtabellenmaster..spt_values?
Warum wurde es bereitgestellt und wie sollte man es verwenden?

Was sind die Bedeutungen seiner Art, niedrige, hohe Werte?

Update: Die
Google-Suche bietet Tausende von "Verwendungsmöglichkeiten", zum Beispiel:

Antworten:


58

Die spt_valuesTabelle wird in der SQL Server-Dokumentation nicht erwähnt, geht jedoch auf die Sybase-Tage zurück. In den Sybase-Online-Dokumenten ist eine äußerst minimale Dokumentation enthalten, die in diesem Kommentar zusammengefasst werden kann:

Um zu sehen, wie es verwendet wird, führen Sie sp_helptext aus und suchen Sie im Text nach einer der Systemprozeduren, die darauf verweisen.

Mit anderen Worten, lesen Sie den Code und arbeiten Sie ihn selbst aus.

Wenn Sie in den gespeicherten Systemprozeduren stöbern und die Tabellendaten selbst untersuchen, ist es ziemlich klar, dass die Tabelle verwendet wird, um Codes (unter anderem) in lesbare Zeichenfolgen zu übersetzen. Oder wie es in der oben verlinkten Sybase-Dokumentation heißt: "Interne Systemwerte [...] in ein für Menschen lesbares Format konvertieren".

Die Tabelle wird manchmal auch in Codefragmenten in MSDN-Blogs verwendet - jedoch nie in der formalen Dokumentation - normalerweise als bequeme Quelle für eine Liste von Zahlen. Wie bereits an anderer Stelle erläutert , ist das Erstellen einer eigenen Zahlenquelle eine sicherere und zuverlässigere Lösung als die Verwendung einer undokumentierten Systemtabelle. Es gibt sogar eine Connect-Anforderung , um eine 'richtige', dokumentierte Nummerntabelle in SQL Server selbst bereitzustellen.

Wie auch immer, die Tabelle ist völlig undokumentiert, so dass es keinen wesentlichen Wert hat, etwas darüber zu wissen, zumindest aus praktischer Sicht: Das nächste Servicepack oder Upgrade könnte es vollständig ändern. Intellektuelle Neugier ist natürlich etwas anderes :-)


6
Es wird stark von den System-Sprocs verwendet, keine Chance, dass es sich ändert.
PerformanceDBA

4
@PerformanceDBA: Sie haben wahrscheinlich Recht (schließlich war die Tabelle vermutlich von Version 4.x oder früher bis 2008 vorhanden), aber das ist noch keine Garantie dafür, dass Microsoft sie in Zukunft nicht ändern wird. Das Verlassen auf undokumentierte Funktionen birgt immer ein gewisses Risiko, auch wenn es sich um ein kleines handelt.
Pondlife

7
Ich habe dich nicht abgewählt. Ich war mit einer Aussage nicht einverstanden. Es lohnt sich nicht darüber zu streiten, da Sie sich weigern, meinen Punkt anzusprechen, dass es von MS in ihren systemgespeicherten Prozessen stark genutzt wird und daher für das Entfernen diese geschrieben werden müssen, was genauso wahrscheinlich ist wie die Chance eines Schneeballs in der Hölle. Lesen Sie meine andere Antwort für weitere Details. Es gibt keine Garantie, dass MS in Zukunft existieren wird ;-)
PerformanceDBA

14
@PerformanceDBA: Wie gesagt, ich denke, Sie haben wahrscheinlich Recht, aber um Ihren spezifischen Punkt anzusprechen: Microsoft hat bereits viele Systemprozesse so geändert, dass die neuen DMVs anstelle der alten Systemtabellen verwendet werden, sodass der Code eindeutig nicht in Stein gemeißelt ist und wird aktiv gewartet, wenn sich die Versionen ändern. Wenn sie einen Verweis auf dbo.sysusers durch einen Verweis auf sys.database_principals ersetzen können, können sie einen Verweis auf spt_values ​​sicherlich ändern. Ob sie es jemals tun oder nicht, ist natürlich reine Spekulation (ich arbeite nicht für Microsoft).
Pondlife

1
@didierc Aktualisiert, da der ursprüngliche Link jetzt tot ist
Pondlife

5

Meistens in einer anderen Frage beantwortet .

Was sind die Bedeutungen seiner Art, niedrige, hohe Werte?

Die meisten Typen (dh jede bestimmte Nachschlagetabelle, wenn sie separat sind) erfordern entweder Name oder Nummer. Einige Typen erfordern auch niedrige und hohe Spalten. In Sybase haben wir eine ErrorNumber-Spalte, sodass der Sproc RAISERROR kann, der nicht fest codiert ist (kann mit Versionen usw. geändert werden).

Es ist nicht "kryptisch", es sei denn, eine aufgezählte Liste ist für Sie "kryptisch". Es ist nur eine Nachschlagetabelle (alle, unterschieden durch die Spalte Typ).


2

Eine Verwendung, definitiv nicht die primäre Verwendung, besteht darin, eine Reihe von Zahlen zu generieren:

--Generate a series from 1 to 100
SELECT
    TOP 100
    ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNum
FROM master.dbo.spt_values ORDER BY RowNum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.