sysname
är en inbyggd datatyp begränsad till 128 Unicode-tecken som, IIRC, används främst för att lagra objektnamn när man skapar skript. Dess värde kan inte vara NULL
Det är i princip samma sak som att använda nvarchar(128) NOT NULL
REDIGERA
Som nämnde av @Jim i kommentarerna, jag tror inte att det verkligen finns ett affärscase där du skulle använda sysname
för att vara ärlig. Det används huvudsakligen av Microsoft när man bygger det interna sys
tabeller och lagrade procedurer etc inom SQL Server.
Till exempel genom att köra Exec sp_help 'sys.tables'
du kommer att se att kolumnen name
definieras som sysname
detta beror på att värdet av detta faktiskt är ett objekt i sig (en tabell)
Jag skulle inte oroa mig för mycket om det.
Det är också värt att notera att för de personer som fortfarande använder SQL Server 6.5 och lägre (finns det fortfarande människor som använder det?) den inbyggda typen av sysname
är motsvarigheten till varchar(30)
Dokumentation
sysname
definieras med dokumentationen för nchar
och nvarchar
, i kommentarsavsnittet:
sysname är en systemtillförd användardefinierad datatyp som funktionellt motsvarar nvarchar(128) , förutom att den inte är nullbar. sysname används för att referera till databasobjektnamn.
För att förtydliga ovanstående kommentarer, som standard sysname definieras som NOT NULL
det är säkert möjligt att definiera den som nullbar. Det är också viktigt att notera att den exakta definitionen kan variera mellan instanser av SQL Server.
Använda speciella datatyper
sysname datatyp används för tabellkolumner, variabler och lagrade procedurparametrar som lagrar objektnamn. Den exakta definitionen avsysname är relaterad till reglerna för identifierare. Därför kan det variera mellan instanser av SQL Server. sysname är funktionellt samma som nvarchar(128) förutom att sysname som standard är INTE NULL. Tidigare versioner av SQL Server, sysname definieras som varchar(30).
Lite mer information om sysname
tillåta eller förbjuda NULL
värden finns här https://stackoverflow.com/a/52290792/300863
Bara för att det är standard (att vara INTE NULL) garanterar det inte att det blir det!