Ce qui est de type SYSNAME type de données dans SQL Server?
Qu'est-ce que le Serveur SQL de type SYSNAME type de données? BOL dit:
Sysname type de données est utilisé pour
les colonnes de table de variables, et stockées
paramètres de procédure que l'objet de la banque de
des noms.
mais je n'ai pas vraiment l'obtenir. Est-il un cas d'utilisation que vous pouvez fournir?
- En plus de ces belles réponses ci-dessous, il est aussi utilisé pour causer des ravages pour quelqu'un qui essaie d'obtenir de la colonne de métadonnées à l'aide de sys.types, car il partage la même system_type_id de type nvarchar.
Vous devez vous connecter pour publier un commentaire.
sysname
est un construit dans le type de données est limité à 128 caractères Unicode qui, autant que je me souvienne, est principalement utilisé pour stocker les noms d'objet lors de la création de scripts. Sa valeur ne peut pas êtreNULL
C'est fondamentalement la même que l'utilisation de
nvarchar(128) NOT NULL
MODIFIER
Comme mentionné par @Jim dans les commentaires, je ne pense pas qu'il y est vraiment une entreprise cas où vous utiliseriez
sysname
pour être honnête. Il est principalement utilisé par Microsoft lors de la construction de l'internesys
tables et procédures stockées, etc. au sein de SQL Server.Par exemple, par l'exécution de
Exec sp_help 'sys.tables'
vous verrez que la colonnename
est défini commesysname
c'est parce que la valeur de ce qui est réellement un objet en lui-même (un tableau)Je voudrais vous inquiétez pas trop à ce sujet.
Il est également intéressant de noter que, pour les personnes encore à l'aide de SQL Server 6.5 et inférieur (il y a encore des gens à l'utiliser?) construit dans le type de
sysname
est l'équivalent devarchar(30)
Documentation
sysname
est défini avec la documentation denchar
ettype nvarchar
, dans la section remarques:De clarifier les remarques ci-dessus, par par défaut de type sysname est défini comme
NOT NULL
il est certainement possible de le définir comme nullable. Il est également important de noter que la définition exacte peut varier entre les instances de SQL Server.À L'Aide De Types De Données Spéciaux
sysname
pour l'avant (et arrière) de compatibilité dans vos scripts.nvarchar(max)
pas la valeur null dans la SP, mais ils montrent comme unsysname
dans le sys tables.sys.types
c'est unnvarchar(256) not null
. Notez que le type de système ID = 231 (de type nvarchar). Il fonctionne comme un alias de type dans les TDS de nos jours; la première identification d'un alias est de 256, ce qui correspond àsysname
. Comme pour l'utilisation:sysname
est utilisé dans l'information du schéma.Si jamais vous avez besoin pour la création de certains sql dynamique il est approprié d'utiliser
sysname
comme type de données pour les variables de portefeuille de noms de table, les noms de colonnes et les noms de serveurs.Comme un FYI....
select * from sys.types where system_type_id = 231
vous donne deux lignes.(je ne suis pas sûr de ce que cela signifie encore, mais je suis sûr à 100% que c'est gâcher mon code pour le moment)
edit: je suppose que cela signifie que vous devriez vous joindre par le user_type_id dans cette situation (mon cas) ou peut-être les deux à la user_type_id et th esystem_type_id
Cette requête:
rendements:
et ce:
vous donne ceci:
sys.types
détient le types définis par l'utilisateur que vous créez ainsi. Si vous necreate type MyInt from int
vous avez deux lignes avecsystem_type_id = 56
. Un autre qui est dupliqué par défaut est de 240 qui est le type de système de hierarchyid, la géométrie et la géographie.where typ.name<>'sysname'
ou qui ont un autre type de conséquence que je le sache?Permettez-moi de liste à un cas d'utilisation ci-dessous. Espérons que cela aide. Ici j'essaie de trouver le Propriétaire de la Table de la Table 'Stud_dtls" de la DB "Élèves". Comme Mikael mentionné, de type sysname pourrait être utilisé quand il ya un besoin pour la création de certains sql dynamique dont les besoins variables de la tenue de la table des noms, des noms de colonne et le serveur de noms. Juste la pensée de fournir un exemple simple pour compléter son point de vue.
FWIW, vous pouvez passer d'un nom de table pour système utile SP est comme cela, si vous souhaitez explorer une base de données de cette façon :
sysname
est utilisé parsp_send_dbmail
, une procédure stockée qui "Envoie un e-mail aux destinataires spécifiés" et situé dans la base de données msdb.Selon Microsoft,
Autre exemple d'utilisation: lors de l'utilisation de SQL Server 2016+ fonctionnalité de
AT TIME ZONE
La déclaration ci-dessous sera de retour un jour converti à GMT
Si vous voulez passer le temps de la zone comme une variable, par exemple:
alors que la variable doit être de type
sysname
(déclarant commevarchar
provoquera une erreur).