svētdiena, 2011. gada 16. janvāris

Lietotāja definēti T-SQL datu tipi

Ir divu veidu lietotāja definēti tipi- Transact SQL un CLR. Šeit tikai par Transact SQL lietotāja definētiem tipiem.

Tātad- T-SQL lietotāja definēts tips patiesībā ir SQL tips, kam ir piešķirts kāds cits nosaukums. Piemēram, NVarChar(30) varētu izmantot, lai izveidotu lietotāja definētu tipu "TVards". Skripts:
Create Type TVards
FROM NVarChar(30) NOT NULL;
Not Null šajā gadījumā maina tikai to, ka izmantojot šo tipu veidojot tabulu attiecīgā kolonna būs "Not Null", ja vien netiks norādīts savādāk. Tātad, varētu izveidot tabulu:
Create Table dbo.TestTable
(
    TestTableID int primary key identity,
    Vards TVards,
    Teksts NVarChar(200)
)
Lai arī nav norādīts, tabulai kolonna "Vards" nevar būt null, jo lietotāja definēts tips ir ar "Not Null". Tomēr, ja attiecīgai kolonnai norādītu "Null", tad varētu arī Null šajā kolonnā iedabūt.

Tās labās lietas no T-SQL lietotāja definētiem tipiem ir:
* Var standartizēt konkrēta tipa kolonnu
* Var izveidot model datu bāzē un tad visās datubāzēs, kas tiek veidotas uz servera, šis tips būs izmantojams.

Sliktā lieta ir tāda, ka lai mainītu lietotāja definētu tipu- tas ir jāizdzēš un jāizveido no jauna! Bet tas nozīmē, ka tas nevar būt izmantots nevienā tabulā.. Tātad, sliktā lieta ir tik slikta, ka īsti neredzu jēgu šādas iespējas izmantošanai (kā minēts- CLR lietotāja definētie tipi šajā rakstā netiek aprakstīti un par tiem šobrīd man nav viedokļa).

SQL Server 2008 ir iespēja veidot lietotāja definētus tipus- tabulas, ko vēlāk var izmantot lai padotu kā procedūras parametru. To būtu interesanti pamēģināt (vairāk par to šeit).

1 komentārs:

  1. Yep 2008 SQL Serverī var padot parametrus kā tabulas aka masīvus. Jāatzīst ka beidzot M$ līdz tam ir aizdomājies, jo piemēram, ja jāpadod kaut kāds idu bariņš, kam vajag pārbaudīt tiesības, vai kaut kādi citi vienādi elementi, tad beidzot BEIDZOT to var darīt kaut cik civilizēti nevis ar nenormālu, piedodiet, par izteicienu jāšanos izmantojot kaut kādas temp tabulas, comma delimited mainīgos, vai kaut ko tikpat tizlu.

    AtbildētDzēst