Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie COLUMNPROPERTY(), um Spalten- oder Parameterinformationen in SQL Server zurückzugeben

In SQL Server die COLUMNPROPERTY() Funktion gibt Spalten- oder Parameterinformationen zurück.

Sie können damit beispielsweise Informationen über eine Spalte in einer Tabelle, einen Parameter für eine gespeicherte Prozedur usw. zurückgeben

Es akzeptiert drei Argumente:die ID der Tabelle oder Prozedur, die zutreffende Spalte oder den Parameter und die Eigenschaft, über die Sie Informationen wünschen.

Syntax

Die Syntax lautet wie folgt:

COLUMNPROPERTY ( id , column , property )

Beispiel 1 – Abfrage einer Tabelle

In diesem Beispiel erhalte ich Informationen über eine Spalte innerhalb einer Tabelle.

USE Music;
SELECT 
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ArtistId', 'AllowsNull') AS [Result];

Ergebnis:

+----------+
| Result   |
|----------|
| 0        |
+----------+

In diesem Fall erlaubt die ArtistId-Spalte keine NULL-Werte.

Wechseln wir zu einer anderen Spalte:

SELECT 
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ActiveFrom', 'AllowsNull') AS [ActiveFrom],
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ActiveFrom', 'Precision') AS [Precision],
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ActiveFrom', 'Scale') AS [Scale];

Ergebnis:

+--------------+-------------+---------+
| ActiveFrom   | Precision   | Scale   |
|--------------+-------------+---------|
| 1            | 10          | 0       |
+--------------+-------------+---------+

In diesem Fall lässt die ActiveFrom-Spalte NULL-Werte zu. Es hat auch eine Genauigkeit von 10 und eine Skalierung von 0.

Sie werden feststellen, dass ich die OBJECT_ID() verwende Funktion, um die ID der Tabelle zurückzugeben. Ohne diese Funktion müsste ich die ID kennen (oder ich müsste eine weitere Abfrage durchführen, nur um die ID zu erhalten).

Hier ist was OBJECT_ID() gibt im obigen Beispiel zurück:

SELECT OBJECT_ID('Artists') AS Result;

Ergebnis:

+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

Da wir nun also die ID kennen, könnten wir diese an COLUMNPROPERTY() übergeben Funktion stattdessen:

SELECT 
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'AllowsNull') AS [ActiveFrom],
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'Precision') AS [Precision],
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'Scale') AS [Scale];

Ergebnis:

+--------------+-------------+---------+
| ActiveFrom   | Precision   | Scale   |
|--------------+-------------+---------|
| 1            | 10          | 0       |
+--------------+-------------+---------+

Beispiel 2 – Abfrage einer Prozedur

In diesem Beispiel erhalte ich Informationen über einen Parameter einer gespeicherten Prozedur.

USE Music;
SELECT 
  COLUMNPROPERTY(
      OBJECT_ID('dbo.uspGetAlbumsByArtist'), 
      '@ArtistId', 
      'IsOutParam') AS [Result];

Ergebnis:

+----------+
| Result   |
|----------|
| 0        |
+----------+

Es ist also genau die gleiche Syntax. In diesem Fall der Parameter @ArtistId ist kein Ausgabeparameter.

Vollständige Liste der Optionen

Hier ist eine vollständige Liste der Argumente, die Sie an COLUMNPROPERTY() übergeben können zum Zeitpunkt des Schreibens:

  • ErlaubtNull
  • Spalten-ID
  • FullTextTypeColumn
  • GeneratedAlwaysType
  • IstColumnSet
  • Wird berechnet
  • IstCursorType
  • Ist deterministisch
  • IstVolltextIndexiert
  • Ist ausgeblendet
  • IstIdentität
  • IsIdNotForRepl
  • IstIndexierbar
  • IstOutParam
  • IstPräzise
  • IsRowGuidCol
  • IstSparse
  • IstSystemverifiziert
  • IsXmlIndexable
  • Präzision
  • Skalieren
  • Statistische Semantik
  • Systemdatenzugriff
  • Benutzerdatenzugriff
  • VerwendetAnsiTrim

Eine detaillierte Erklärung jeder Eigenschaft finden Sie in der Microsoft-Dokumentation.

Siehe auch OBJECTPROPERTYEX() für eine ähnliche Funktion, die Informationen über schemabezogene Objekte anstelle von Datenbanken zurückgibt, und DATABASEPROPERTYEX() das Eigenschaftsinformationen für Datenbanken zurückgibt.