Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare COLUMNPROPERTY() per restituire informazioni su colonne o parametri in SQL Server

In SQL Server, COLUMNPROPERTY() la funzione restituisce informazioni sulla colonna o sul parametro.

Ad esempio, puoi usarlo per restituire informazioni su una colonna in una tabella, un parametro per una procedura memorizzata, ecc

Accetta tre argomenti:l'ID della tabella o della procedura, la colonna o il parametro applicabile e la proprietà su cui desideri informazioni.

Sintassi

La sintassi è questa:

COLUMNPROPERTY ( id , column , property )

Esempio 1 – Interrogare una tabella

In questo esempio, ottengo informazioni su una colonna all'interno di una tabella.

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

Risultato:

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

In questo caso, la colonna ArtistId non consente valori NULL.

Passiamo a un'altra colonna:

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];

Risultato:

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

In questo caso, la colonna ActiveFrom consente valori NULL. Ha anche una precisione di 10 e una scala di 0.

Noterai che utilizzo OBJECT_ID() funzione per restituire l'ID della tabella. Senza questa funzione, avrei bisogno di conoscere l'ID (o dovrei fare un'altra query solo per ottenere l'ID).

Ecco cosa OBJECT_ID() restituisce nell'esempio sopra:

SELECT OBJECT_ID('Artists') AS Result;

Risultato:

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

Quindi ora che conosciamo l'ID, possiamo passarlo a COLUMNPROPERTY() funzione invece:

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

Risultato:

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

Esempio 2 – Interrogare una procedura

In questo esempio, ottengo informazioni su un parametro di una procedura memorizzata.

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

Risultato:

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

Quindi è esattamente la stessa sintassi. In questo caso, il parametro @ArtistId non è un parametro di output.

Elenco completo delle opzioni

Ecco un elenco completo di argomenti che puoi passare a COLUMNPROPERTY() nel momento in cui scrivo:

  • Consente Null
  • ColumnId
  • FullTextTypeColumn
  • GeneratoAlwaysType
  • IsColumnSet
  • È calcolato
  • TipoCursore
  • È deterministico
  • IsFulltextIndexed
  • È nascosto
  • È l'identità
  • IsIdNotForRepl
  • È indicizzabile
  • Parametro IsOut
  • È preciso
  • IsRowGuidCol
  • È sparso
  • IsSystemVerified
  • IsXmlIndexable
  • Precisione
  • Bilancia
  • Semantica Statistica
  • Accesso ai dati di sistema
  • Accesso ai dati utente
  • Utilizza AnsiTrim

Consulta la documentazione Microsoft per una spiegazione dettagliata di ciascuna proprietà.

Vedi anche OBJECTPROPERTYEX() per una funzione simile che restituisce informazioni sugli oggetti con ambito schema anziché sui database e DATABASEPROPERTYEX() che restituisce informazioni sulla proprietà per i database.