In SQL Server kunt u de TYPEPROPERTY()
. gebruiken functie om informatie over een gegevenstype te retourneren.
U geeft de naam van het gegevenstype op, evenals de eigenschap die u wilt retourneren, en het retourneert informatie over die eigenschap voor het gegeven gegevenstype.
U kunt TYPEPROPERTY()
. gebruiken voor systeemgegevenstypen en door de gebruiker gedefinieerde gegevenstypen.
Syntaxis
De syntaxis gaat als volgt:
TYPEPROPERTY (type , property)
Waar type is het gegevenstype, en eigenschap is de specifieke eigenschap waarover u informatie wilt.
Er zijn 5 mogelijke eigenschappen:AllowsNull , OwnerId , Precisie , Schaal , en UsesAnsiTrim .
Raadpleeg de Microsoft-documentatie voor meer gedetailleerde informatie over deze eigenschappen en hoe ze werken met deze functie.
Voorbeeld 1 – Basisgebruik
Hier is een eenvoudig voorbeeld om te laten zien hoe het werkt.
SELECT TYPEPROPERTY('int', 'Precision') AS Result;
Resultaat:
+----------+ | Result | |----------| | 10 | +----------+
Dit resultaat vertelt ons dat de int gegevenstype heeft een precisie van 10.
Voorbeeld 2 – Alle eigenschappen
Hier is een voorbeeld dat alle eigenschappen retourneert voor de datetime2 gegevenstype.
SELECT TYPEPROPERTY( 'datetime2', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'datetime2', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'datetime2', 'Precision') AS [Precision], TYPEPROPERTY( 'datetime2', 'Scale') AS [Scale], TYPEPROPERTY( 'datetime2', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Resultaat:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 1 | 4 | 27 | 7 | NULL | +--------------+-----------+-------------+---------+----------------+
De reden UsesAnsiTrim
is NULL is omdat die eigenschap alleen van toepassing is op binaire en string-gegevenstypen.
Om te demonstreren, hier is het nog een keer, behalve het gebruik van een string-gegevenstype:
SELECT TYPEPROPERTY( 'varchar', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'varchar', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'varchar', 'Precision') AS [Precision], TYPEPROPERTY( 'varchar', 'Scale') AS [Scale], TYPEPROPERTY( 'varchar', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Resultaat:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 1 | 4 | 8000 | NULL | 1 | +--------------+-----------+-------------+---------+----------------+
Deze keer Scale
is niets. Dat komt omdat deze eigenschap alleen van toepassing is op numerieke en bepaalde datumtypen.
Voorbeeld 3 – Schaal of precisie specificeren
Bij sommige gegevenstypen kunt u een schaal of precisie opgeven, maar TYPEPROPERTY()
accepteert dat niet:
SELECT TYPEPROPERTY( 'datetime2(3)', 'Scale') AS [Datetime2 Scale], TYPEPROPERTY( 'datetime2(3)', 'Precision') AS [Datetime2 Precision], TYPEPROPERTY( 'varchar(255)', 'Precision') AS [Varchar Precision];
Resultaat:
+-------------------+-----------------------+---------------------+ | Datetime2 Scale | Datetime2 Precision | Varchar Precision | |-------------------+-----------------------+---------------------| | NULL | NULL | NULL | +-------------------+-----------------------+---------------------+
Voorbeeld 4 – Door de gebruiker gedefinieerde gegevenstypen
De TYPEPROPERTY()
functie werkt ook op door de gebruiker gedefinieerde gegevenstypen.
Hier is een voorbeeld.
SELECT TYPEPROPERTY( 'clientcode', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'clientcode', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'clientcode', 'Precision') AS [Precision], TYPEPROPERTY( 'clientcode', 'Scale') AS [Scale], TYPEPROPERTY( 'clientcode', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Resultaat:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 0 | 1 | 8 | NULL | 1 | +--------------+-----------+-------------+---------+----------------+
Voorbeeld 5 – Inclusief het gegevenstype Schemavoorvoegsel
U kunt het gegevenstype ook vooraf laten gaan door de schemanaam.
SELECT TYPEPROPERTY( 'sys.int', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'sys.int', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'sys.int', 'Precision') AS [Precision], TYPEPROPERTY( 'sys.int', 'Scale') AS [Scale], TYPEPROPERTY( 'sys.int', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Resultaat:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 1 | 4 | 10 | 0 | NULL | +--------------+-----------+-------------+---------+----------------+
Voorbeeld 6 – Informatie teruggeven voor alle gegevenstypen in de database
Hier is een voorbeeld dat eigenschapsinformatie retourneert voor alle gegevenstypen in de huidige database.
Om dit te doen, vraag ik de sys.types
systeem bekijken. Ik gebruik ook de SCHEMA_NAME()
functie om de naam van het schema te krijgen op basis van zijn ID.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Data Type], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'AllowsNull') AS [AllowsNull], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId') AS [OwnerId], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'Precision') AS [Precision], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'Scale') AS [Scale], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'UsesAnsiTrim') AS [UsesAnsiTrim] FROM sys.types ORDER BY name;
Resultaat:
+----------+------------------+--------------+-----------+-------------+---------+----------------+ | Schema | Data Type | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |----------+------------------+--------------+-----------+-------------+---------+----------------| | sys | bigint | 1 | 4 | 19 | 0 | NULL | | sys | binary | 1 | 4 | 8000 | NULL | 1 | | sys | bit | 1 | 4 | 1 | NULL | NULL | | sys | char | 1 | 4 | 8000 | NULL | 1 | | dbo | clientcode | 0 | 1 | 8 | NULL | 1 | | sys | date | 1 | 4 | 10 | 0 | NULL | | sys | datetime | 1 | 4 | 23 | 3 | NULL | | sys | datetime2 | 1 | 4 | 27 | 7 | NULL | | sys | datetimeoffset | 1 | 4 | 34 | 7 | NULL | | sys | decimal | 1 | 4 | 38 | 38 | NULL | | sys | float | 1 | 4 | 53 | NULL | NULL | | sys | geography | 1 | 4 | -1 | NULL | NULL | | sys | geometry | 1 | 4 | -1 | NULL | NULL | | sys | hierarchyid | 1 | 4 | 892 | NULL | NULL | | sys | image | 1 | 4 | 2147483647 | NULL | NULL | | sys | int | 1 | 4 | 10 | 0 | NULL | | sys | money | 1 | 4 | 19 | 4 | NULL | | sys | nchar | 1 | 4 | 4000 | NULL | NULL | | sys | ntext | 1 | 4 | 1073741823 | NULL | NULL | | sys | numeric | 1 | 4 | 38 | 38 | NULL | | sys | nvarchar | 1 | 4 | 4000 | NULL | NULL | | sys | real | 1 | 4 | 24 | NULL | NULL | | sys | smalldatetime | 1 | 4 | 16 | 0 | NULL | | sys | smallint | 1 | 4 | 5 | 0 | NULL | | sys | smallmoney | 1 | 4 | 10 | 4 | NULL | | sys | sql_variant | 1 | 4 | 0 | NULL | 1 | | sys | sysname | 0 | 4 | 128 | NULL | NULL | | sys | text | 1 | 4 | 2147483647 | NULL | NULL | | sys | time | 1 | 4 | 16 | 7 | NULL | | sys | timestamp | 0 | 4 | 8 | NULL | NULL | | sys | tinyint | 1 | 4 | 3 | 0 | NULL | | sys | uniqueidentifier | 1 | 4 | 16 | NULL | NULL | | sys | varbinary | 1 | 4 | 8000 | NULL | 1 | | sys | varchar | 1 | 4 | 8000 | NULL | 1 | | sys | xml | 1 | 4 | -1 | NULL | NULL | +----------+------------------+--------------+-----------+-------------+---------+----------------+
Houd er echter rekening mee dat sys.types de precisie en schaal al bevat, dus je zou ook dit kunnen doen:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Data Type], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'AllowsNull') AS [AllowsNull], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId') AS [OwnerId], Precision, Scale, TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'UsesAnsiTrim') AS [UsesAnsiTrim] FROM sys.types ORDER BY name;
Resultaat:
+----------+------------------+--------------+-----------+-------------+---------+----------------+ | Schema | Data Type | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |----------+------------------+--------------+-----------+-------------+---------+----------------| | sys | bigint | 1 | 4 | 19 | 0 | NULL | | sys | binary | 1 | 4 | 0 | 0 | 1 | | sys | bit | 1 | 4 | 1 | 0 | NULL | | sys | char | 1 | 4 | 0 | 0 | 1 | | dbo | clientcode | 0 | 1 | 0 | 0 | 1 | | sys | date | 1 | 4 | 10 | 0 | NULL | | sys | datetime | 1 | 4 | 23 | 3 | NULL | | sys | datetime2 | 1 | 4 | 27 | 7 | NULL | | sys | datetimeoffset | 1 | 4 | 34 | 7 | NULL | | sys | decimal | 1 | 4 | 38 | 38 | NULL | | sys | float | 1 | 4 | 53 | 0 | NULL | | sys | geography | 1 | 4 | 0 | 0 | NULL | | sys | geometry | 1 | 4 | 0 | 0 | NULL | | sys | hierarchyid | 1 | 4 | 0 | 0 | NULL | | sys | image | 1 | 4 | 0 | 0 | NULL | | sys | int | 1 | 4 | 10 | 0 | NULL | | sys | money | 1 | 4 | 19 | 4 | NULL | | sys | nchar | 1 | 4 | 0 | 0 | NULL | | sys | ntext | 1 | 4 | 0 | 0 | NULL | | sys | numeric | 1 | 4 | 38 | 38 | NULL | | sys | nvarchar | 1 | 4 | 0 | 0 | NULL | | sys | real | 1 | 4 | 24 | 0 | NULL | | sys | smalldatetime | 1 | 4 | 16 | 0 | NULL | | sys | smallint | 1 | 4 | 5 | 0 | NULL | | sys | smallmoney | 1 | 4 | 10 | 4 | NULL | | sys | sql_variant | 1 | 4 | 0 | 0 | 1 | | sys | sysname | 0 | 4 | 0 | 0 | NULL | | sys | text | 1 | 4 | 0 | 0 | NULL | | sys | time | 1 | 4 | 16 | 7 | NULL | | sys | timestamp | 0 | 4 | 0 | 0 | NULL | | sys | tinyint | 1 | 4 | 3 | 0 | NULL | | sys | uniqueidentifier | 1 | 4 | 0 | 0 | NULL | | sys | varbinary | 1 | 4 | 0 | 0 | 1 | | sys | varchar | 1 | 4 | 0 | 0 | 1 | | sys | xml | 1 | 4 | 0 | 0 | NULL | +----------+------------------+--------------+-----------+-------------+---------+----------------+