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

Brug TYPE_ID() til at få id'et for en datatype i SQL Server

I SQL Server kan du bruge TYPE_ID() funktion til at returnere ID'et for en datatype baseret på dens navn. Dette kan være nyttigt, når du forespørger i en systemvisning, der gemmer en datatypes id, men ikke dens navn. Det er normalt nemmere at huske navnet. Ikke så let at huske ID.

Du kan bruge TYPE_ID() for systemdatatyper og brugerdefinerede datatyper.

Eksempel 1 – Grundlæggende brug

Her er et grundlæggende eksempel for at demonstrere, hvordan det virker.

SELECT TYPE_ID('varchar') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| 167      |
+----------+

Dette resultat fortæller os, at varchar datatypen har et ID på 167.

Eksempel 2 – Et databaseeksempel

Her er et eksempel på brug af TYPE_ID() i en WHERE klausul for at filtrere resultaterne til kun en given datatype.

SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  c.user_type_id AS [Type ID],
  TYPE_NAME(c.user_type_id) AS [Type Name]
FROM sys.objects AS o   
JOIN sys.columns AS c  ON o.object_id = c.object_id
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.user_type_id = TYPE_ID('varchar');

Resultat:

+---------------+---------------+-----------+-------------+
| Object Name   | Column Name   | Type ID   | Type Name   |
|---------------+---------------+-----------+-------------|
| Individual    | FirstName     | 167       | varchar     |
| Individual    | LastName      | 167       | varchar     |
| Occupation    | JobTitle      | 167       | varchar     |
| Event         | EventName     | 167       | varchar     |
| Scoreboard    | Player        | 167       | varchar     |
| Team          | TeamName      | 167       | varchar     |
| Client        | FirstName     | 167       | varchar     |
| Client        | LastName      | 167       | varchar     |
| Colors        | ColorName     | 167       | varchar     |
+---------------+---------------+-----------+-------------+

Du vil bemærke, at jeg også bruger TYPE_NAME() i dette eksempel for at returnere navnet baseret på dets ID.

Eksempel 3 – Brugerdefinerede typer

Du kan også bruge TYPE_ID() for brugerdefinerede typer. Her er et eksempel, der inkluderer et brugerdefineret typealias i resultaterne.

SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  c.user_type_id AS [Type ID],
  TYPE_NAME(c.user_type_id) AS [Type Name],
  CASE 
    WHEN t.is_user_defined = 1 THEN 'Yes'
    ELSE 'No' 
  END AS [User Defined?]
FROM sys.objects AS o   
JOIN sys.columns AS c  ON o.object_id = c.object_id
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.user_type_id = TYPE_ID('varchar')
OR c.user_type_id = TYPE_ID('clientcode');

Resultat:

+---------------+---------------+-----------+-------------+-----------------+
| Object Name   | Column Name   | Type ID   | Type Name   | User Defined?   |
|---------------+---------------+-----------+-------------+-----------------|
| Individual    | FirstName     | 167       | varchar     | No              |
| Individual    | LastName      | 167       | varchar     | No              |
| Occupation    | JobTitle      | 167       | varchar     | No              |
| Event         | EventName     | 167       | varchar     | No              |
| Scoreboard    | Player        | 167       | varchar     | No              |
| Team          | TeamName      | 167       | varchar     | No              |
| Client        | ClientCode    | 257       | clientcode  | Yes             |
| Client        | FirstName     | 167       | varchar     | No              |
| Client        | LastName      | 167       | varchar     | No              |
| Colors        | ColorName     | 167       | varchar     | No              |
+---------------+---------------+-----------+-------------+-----------------+

Her er klientkodetypen et brugerdefineret typealias, og det er is_user_defined flag er 1 . I dette tilfælde bruger jeg en CASE udtryk for at returnere Yes (og for at returnere No hvis det er 0 ).

Eksempel 4 – Ugyldig type eller utilstrækkelig tilladelse

Hvis du angiver et ugyldigt typenavn, eller du ikke har tilstrækkelig tilladelse til at referere til typen, vil resultatet være NULL.

SELECT TYPE_ID('oops') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

  1. MariaDB VERSION() Forklaret

  2. Lær hvordan du bruger SQL SELECT med eksempler

  3. Transponer rækker og kolonner uden aggregat

  4. Hvordan viser jeg de sidste forespørgsler udført på MySQL?