161 votes

Qu'est-ce que le type de données SYSNAME dans SQL Server ?

À quoi sert le type de données SYSNAME du serveur SQL ? BOL dit :

Le type de données sysname est utilisé pour colonnes de table, les variables et les paramètres de procédures stockées qui stockent d'objets.

mais je ne comprends pas vraiment. Pouvez-vous me donner un exemple d'utilisation ?

3 votes

En plus de ces belles réponses ci-dessous, il est également utilisé pour causer des ravages pour quelqu'un qui essaie d'obtenir des métadonnées de colonne en utilisant sys.types, car il partage le même system_type_id que nvarchar.

1voto

AjV Jsy Points 1551

Si vous souhaitez explorer une base de données de cette manière, vous pouvez passer un nom de table à des SP système utiles :

DECLARE @Table sysname; SET @Table = 'TableName';
EXEC sp_fkeys @Table;
EXEC sp_help @Table;

1voto

d219 Points 1172

Un autre cas d'utilisation est celui de l'utilisation de la fonctionnalité de SQL Server 2016+ de AT TIME ZONE

L'instruction ci-dessous renvoie une date convertie en GMT

SELECT 
CONVERT(DATETIME, SWITCHOFFSET([ColumnA], DATEPART(TZOFFSET, [ColumnA] AT TIME ZONE 'GMT Standard Time')))

Si vous voulez passer le fuseau horaire comme une variable, disons :

SELECT 
CONVERT(DATETIME, SWITCHOFFSET([ColumnA], DATEPART(TZOFFSET, [ColumnA] AT TIME ZONE @TimeZone)))

alors cette variable doit être du type sysname (en le déclarant comme varchar provoquera une erreur).

0voto

Ed Avis Points 302

Pouvez-vous fournir un cas d'utilisation ?

Tout endroit où vous voulez stocker un nom d'objet pour l'utiliser par des scripts de maintenance de la base de données. Par exemple, un script purge les anciennes lignes de certaines tables qui ont une colonne de date. Il est configuré avec une table qui donne le nom de la table, le nom de la colonne sur laquelle filtrer, et le nombre de jours d'historique à conserver. Un autre script vide certaines tables dans des fichiers CSV, et encore une fois est configuré avec une table listant les tables à vider. Ces tables de configuration peuvent utiliser la fonction sysname pour stocker les noms des tables et des colonnes.

0 votes

Vous n'avez pas besoin de ça du tout. Utilisez simplement un nvarchar(128) not null colonne. Le nom n'est que cela, un nom. Il n'a pas besoin d'être sysname à utiliser

2 votes

Bien sûr, et en fait, il ne doit même pas être de ce type, nvarchar(300) fonctionnerait aussi ou même simplement varchar si vous n'utilisez pas l'Unicode dans les noms de table (comme presque personne, j'en suis sûr). L'avantage de sysname c'est d'une part parce que cela rend l'intention plus claire : cette colonne contient un nom d'objet ; et d'autre part parce que même si vous migrez vers une version différente de MSSQL qui change le type de données utilisé pour les noms d'objets (comme cela s'est déjà produit), ce sera toujours le bon type.

0 votes

Non, ça ne l'est pas. C'est juste un autre type d'utilisateur (essentiellement un alias) mappé à nvarchar(128) NOT NULL . En fait, c'est ainsi que l'on peut trouver le type - en vérifiant le code user_type_id la valeur de la colonne. Vous gagnez rien plus en utilisant ce type que si vous créez votre propre type d'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X