Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use COLUMNPROPERTY() para retornar informações de coluna ou parâmetro no SQL Server


No SQL Server, o COLUMNPROPERTY() função retorna informações de coluna ou parâmetro.

Por exemplo, você pode usá-lo para retornar informações sobre uma coluna em uma tabela, um parâmetro para um procedimento armazenado, etc.

Ele aceita três argumentos:o ID da tabela ou procedimento, a coluna ou parâmetro aplicável e a propriedade sobre a qual você deseja obter informações.


Sintaxe


A sintaxe fica assim:
COLUMNPROPERTY ( id , column , property )

Exemplo 1 – Consultar uma tabela


Neste exemplo, recebo informações sobre uma coluna dentro de uma tabela.
USE Music;
SELECT 
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ArtistId', 'AllowsNull') AS [Result];

Resultado:
+----------+
| Result   |
|----------|
| 0        |
+----------+

Nesse caso, a coluna ArtistId não permite valores NULL.

Vamos mudar para uma coluna diferente:
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];

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

Nesse caso, a coluna ActiveFrom permite valores NULL. Ele também tem uma precisão de 10 e uma escala de 0.

Você notará que eu uso o OBJECT_ID() função para retornar o ID da tabela. Sem essa função, eu precisaria saber o ID (ou precisaria fazer outra consulta apenas para obter o ID).

Veja o que OBJECT_ID() retorna no exemplo acima:
SELECT OBJECT_ID('Artists') AS Result;

Resultado:
+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

Agora que sabemos o ID, podemos passá-lo para o COLUMNPROPERTY() função em vez disso:
SELECT 
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'AllowsNull') AS [ActiveFrom],
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'Precision') AS [Precision],
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'Scale') AS [Scale];

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

Exemplo 2 – Consultar um procedimento


Neste exemplo, recebo informações sobre um parâmetro de um procedimento armazenado.
USE Music;
SELECT 
  COLUMNPROPERTY(
      OBJECT_ID('dbo.uspGetAlbumsByArtist'), 
      '@ArtistId', 
      'IsOutParam') AS [Result];

Resultado:
+----------+
| Result   |
|----------|
| 0        |
+----------+

Então é exatamente a mesma sintaxe. Neste caso, o parâmetro @ArtistId não é um parâmetro de saída.

Lista completa de opções


Aqui está uma lista completa de argumentos que você pode passar para COLUMNPROPERTY() no momento da escrita:
  • PermiteNulo
  • ColunaId
  • FullTextTypeColumn
  • GeneratedAlwaysType
  • IsColumnSet
  • É computado
  • IsCursorType
  • ÉDeterminístico
  • IsFulltextIndexed
  • Está oculto
  • IsIdentity
  • IsIdNotForRepl
  • É indexável
  • IsOutParam
  • É preciso
  • IsRowGuidCol
  • ÉSparse
  • IsSystemVerified
  • IsXmlIndexável
  • Precisão
  • Escala
  • Semântica Estatística
  • SystemDataAccess
  • UserDataAccess
  • UsaAnsiTrim

Consulte a documentação da Microsoft para obter uma explicação detalhada de cada propriedade.

Veja também OBJECTPROPERTYEX() para uma função semelhante que retorna informações sobre objetos com escopo de esquema em vez de bancos de dados e DATABASEPROPERTYEX() que retorna informações de propriedade para bancos de dados.