Ricerca 
it-ITen-US
Register
Login
 
Author:  Sabrina Cosolo
Published:  2008/03/09

SQL Server base Notions (part 2)
How to create a database in SQL Server Using only SQL code

Come si crea un database in SQL Server 2005 usando solo il codice SQL, come usare le opzioni che abbiamo già visto da SQL Management Studio, qual'è il loro uso e quali sono i motivi per sceglierle.

Usare solo codice SQL

SQL Significa Structured Query Language, ovvero linguaggio strutturato per le interrogazioni, ma ovviamente creare database, tabelle, vincoli, indici, viste, stored procedure, user defined function non può essere qualcosa legato solo ad una interfaccia programmatica come SQL Management Studio, pertanto in SQL una parte del linguaggio detta DDL (Data Definition Language) Permette di generare i database e ciò che contengono. Il DDL ha alcune porzioni standard, ma ovviamente essendo legato all' RDBMS per cui è progettato, ve ne sono vari dialetti, quello che noi usiamo è valido per SQL Server, probabilmente per Oracle è simile ma ha parametri personalizzati, simile sarà anche quello di altri RDBMS come Informix oppure DB2 ecc.

L'equivalente della generazione del database preoccupandoci di dare solo il nome allo stesso in codice SQL è ottenuta eseguendo la seguente Query:

CREATE DATABASE [goofy]

Altrettanto semplice è cancellare un database.

DROP DATABASE [goofy]

Attenzione che non sono richieste conferme e tutto sparisce senza rimedio. Fortunatamente, per esegire questo tipo di script è necessario che l'utente appartenga al gruppo dei Sysadmin di SQL Server, pertanto, se sappiamo fare il nostro lavoro, i normali utenti non potranno mai usare simili script.

Possiamo verificare se il database esiste prima di crearlo:

IF NOT EXISTS 
    (SELECT * FROM sys.databases 
        WHERE name = 'goofy')
    BEGIN
        CREATE DATABASE [goofy]
        PRINT 'Il database goofy è stato generato con successo'
    END
ELSE
    PRINT 'Il database goofy esiste già!'

Questa query così come CREATE DATABASE o DROP DATABASE vanno eseguite sul database Master, che tiene nota di tutti gli oggetti database creati in SQL Server (oltre a memorizzare molte altre informazioni strutturali sull'installazione di SQL Server). La vista di sistema sys.databases fornisce la lista di tutti i database che sono ospitati dal server RDBMS. Se siete curiosi e vi guardate dentro, troverete tutte le informazioni che abbiamo visto nella maschera di creazione database oltre ad una serie di altre informazioni tecniche.

Tutte le informazioni che abbiamo visto nella maschera di generazione database, possono essere specificate anche in SQL, vediamo come:

USE [master]
GO
CREATE DATABASE [goofy] 
    ON  PRIMARY 
    ( NAME = N'goofy'
    , FILENAME = N'D:\sql.dir\data\goofy.mdf' 
    , SIZE = 5MB 
    , MAXSIZE = 10000MB
    , FILEGROWTH = 10MB )
LOG ON 
    ( NAME = N'goofy_log'
    , FILENAME = N'D:\sql.dir\data\goofy_log.LDF' 
    , SIZE = 2MB 
    , MAXSIZE = 5000MB 
    , FILEGROWTH = 10%)
COLLATE Latin1_General_CI_AS
GO

EXEC dbo.sp_dbcmptlevel @dbname=N'goofy', @new_cmptlevel=90
GO
ALTER DATABASE [goofy] SET RECOVERY FULL 
GO
ALTER DATABASE [goofy] SET  MULTI_USER 
GO

Come possiamo vedere nello script, possiamo specificare:

  • ON PRIMARY, indica qual'è il filegroup in cui inserire il file dati creato.
  • Nome logico del database e del file di log (parametro NAME)
  • Path completo del file di database e del file di log (parametro FILENAME)
  • La dimensione iniziale  (parametro SIZE) che ammette varie unità di misura fra cui KB=Kilobyte, MB=Megabyte, GB=Gigabyte.
  • La dimensione massima ammissibile (parametro MAXSIZE) con la possibilità di specificare UNLIMITED se non si vuole mettere limiti alla dimensione, tenendo conto delle eventuali controindicazioni.
  • Il metodo di crescita automatica (parametro FILEGROWTH) che può essere in valore (KB,MB,GB) o in percentuale.
  • COLLATE indica qual'è il tipo di organizzazione è usata per l'ordinamento e la comparazione delle stringhe, in questo caso Lettere e numeri Latini, Generico, Case Insensitive, Accent Sensitive.

La prima porzione dello script, che va  fino al primo GO termina qui, vi sono poi altri 3 comandi, ciascuno con un GO singolo perché si tratta di operazioni che non possono essere eseguite in un unica query.

  • L'esecuzione di sp_dbcmptlevel serve a indicare il livello di compatibilità, sostituisce la combobox sulla finestra opzioni.
  • SET RECOVERY indica al database il tipo di recovery model (Full, Simple, Bulk Logged).
  • SET MULTI_USER, indica che il database è operativo, si potrebbe usare il SINGLE_USER in caso di operazioni di straordinaria manutenzione per impedire agli utenti di cercare di accedere al database.

Tutti gli script, di creazione database, come già detto, devono essere eseguiti sul database Master e l'utente che li esegue deve appartenere al ruolo Server di SYSAdmin, oppure DBCreator. Attenzione che i diritti amministrativi su SQL Server non sono la stessa cosa dei diritti amministrativi su WINDOWS, se non per alcuni particolari utenti.

Prendete nota, del fatto che è VIETATISSIMO dare agli utenti che utilizzano un database il ruolo di Sysadmin, tanto quanto è VIETATISSIMO togliere la password all'utente SA o utilizzarlo come utente per far connettere una vostra applicazione.

Tabella delle collation standard

Siccome non è facile trovarla nei meandri della documentazione di SQL Server, riporto la lista delle collation che possono essere utilizzate in SQL Server, ovunque si possa utilizzare il comando COLLATE. La prima tabella indica alcune collation che sono state modificate recentemente.

Old collation name New collation name

Japanese

Japanese_901

Chinese

Chinese_PRC_90

Chinese_PRC_Stroke

Chinese_PRC_Stroke_90

Chinese_Taiwan_Bopomofo

Chinese_Taiwan_Bopomofo_90

Chinese_Taiwan_Stroke

Chinese_Taiwan_Stroke_90

Korean

Korean_90

Hindi (deprecated in this release)

Indic_General_90_CI_AS (Unicode only)

 

Windows System Locale LCID (Locale ID) Default SQL Collation Code page

Afrikaans

0x436

Latin1_General_CI_AS

1252

Albanian

0x41c

Albanian_CI_AS

1250

Arabic (Algeria)

0x1401

Arabic_CI_AS

1256

Arabic (Bahrain)

0x3c01

Arabic_CI_AS

1256

Arabic (Egypt)

0xc01

Arabic_CI_AS

1256

Arabic (Iraq)

0x801

Arabic_CI_AS

1256

Arabic (Jordan)

0x2c01

Arabic_CI_AS

1256

Arabic (Kuwait)

0x3401

Arabic_CI_AS

1256

Arabic (Lebanon)

0x3001

Arabic_CI_AS

1256

Arabic (Libya)

0x1001

Arabic_CI_AS

1256

Arabic (Morocco)

0x1801

Arabic_CI_AS

1256

Arabic (Oman)

0x2001

Arabic_CI_AS

1256

Arabic (Qatar)

0x4001

Arabic_CI_AS

1256

Arabic (Saudi Arabia)

0x401

Arabic_CI_AS

1256

Arabic (Syria)

0x2801

Arabic_CI_AS

1256

Arabic (Tunisia)

0x1c01

Arabic_CI_AS

1256

Arabic (U.A.E.)

0x3801

Arabic_CI_AS

1256

Arabic (Yemen)

0x2401

Arabic_CI_AS

1256

Armenian (Republic of Armenia)

0x42b

Latin1_General_CI_AS

Unicode

Azeri-Cyrillic (Azerbaijan)1

0x82c

Azeri_Cyrillic_90_CI_AS

1251

Azeri-Latin (Azerbaijan)1

0x42c

Azeri_Latin_90_CI_AS

1254

Basque

0x42d

Latin1_General_CI_AS

1252

Belarusian

0x423

Cyrillic_General_CI_AS

1251

Bulgarian

0x402

Cyrillic_General_CI_AS

1251

Catalan

0x403

Latin1_General_CI_AS

1252

Chinese (Hong Kong S.A.R.)1

0xc04

Chinese_Hong_Kong_Stroke_90_CI_AS

950

Chinese (Macau S.A.R.)2

0x1404

Chinese_PRC_90_CI_AS

950

Chinese (PRC)2

0x804

Chinese_PRC_CI_AS

936

Chinese (PRC)

0x20804

Chinese_PRC_Stroke_CI_AS

936

Chinese (Singapore)

0x1004

Chinese_PRC_90_CI_AS

936

Chinese (Taiwan)

0x404

Chinese_Taiwan_Stroke_CI_AS

950

Chinese (Taiwan)

0x30404

Chinese_Taiwan_Bopomofo_CI_AS

950

Croatian

0x41a

Croatian_CI_AS

1250

Czech

0x405

Czech_CI_AS

1250

Danish

0x406

Danish_Norwegian_CI_AS

1252

Divehi1

0x465

Divehi_90_CI_AS (Unicode only)

Unicode

Dutch (Belgium)

0x813

Latin1_General_CI_AS

1252

Dutch (Netherlands)

0x413

Latin1_General_CI_AS

1252

English (Australia)

0xc09

Latin1_General_CI_AS

1252

English (Belize)

0x2809

Latin1_General_CI_AS

1252

English (Canada)

0x1009

Latin1_General_CI_AS

1252

English (Caribbean)

0x2409

Latin1_General_CI_AS

1252

English (Hong Kong S.A.R.)

0x3c09

Latin1_General_CI_AS

1252

English (India)

0x4009

Latin1_General_CI_AS

1252

English (Indonesia)

0x3809

Latin1_General_CI_AS

1252

English (Ireland)

0x1809

Latin1_General_CI_AS

1252

English (Jamaica)

0x2009

Latin1_General_CI_AS

1252

English (Malaysia)

0x4409

Latin1_General_CI_AS

1252

English (New Zealand)

0x1409

Latin1_General_CI_AS

1252

English (Philippines)

0x3409

Latin1_General_CI_AS

1252

English (Singapore)

0x4809

Latin1_General_CI_AS

1252

English (South Africa)

0x1c09

Latin1_General_CI_AS

1252

English (Trinidad)

0x2c09

Latin1_General_CI_AS

1252

English (United Kingdom)

0x809

Latin1_General_CI_AS

1252

English (United States)

0x409

SQL_Latin1_General_CP1_CI_AS

1252

English (Zimbabwe)

0x3009

Latin1_General_CI_AS

1252

Estonian

0x425

Estonian_CI_AS

1257

Faeroese

0x438

Latin1_General_CI_AS

1252

Farsi

0x429

Arabic_CI_AS

1256

Finnish

0x40b

Finnish_Swedish_CI_AS

1252

French (Belgium)

0x80c

French_CI_AS

1252

French (Canada)

0xc0c

French_CI_AS

1252

French (France)

0x40c

French_CI_AS

1252

French (Luxembourg)

0x140c

French_CI_AS

1252

French (Monaco)

0x180c

French_CI_AS

1252

French (Switzerland)

0x100c

French_CI_AS

1252

Galician (Spain)

0x456

Latin1_General_CI_AS

1252

Georgian

0x437

Latin1_General_CI_AS

Unicode

German (Austria)

0xc07

Latin1_General_CI_AS

1252

German (Germany)

0x407

Latin1_General_CI_AS

1252

German (Liechtenstein)

0x1407

Latin1_General_CI_AS

1252

German (Luxembourg)

0x1007

Latin1_General_CI_AS

1252

German (Phone Book Sort)

0x10407

German_PhoneBook_CI_AS

1252

German (Switzerland)

0x807

Latin1_General_CI_AS

1252

Greek

0x408

Greek_CI_AS

1253

Gujarati (India)3

0x447

Indic_General_90_CI_AS (Unicode only)

Unicode

Hebrew

0x40d

Hebrew_CI_AS

1255

Hindi3

0x0439

Indic_General_90_CI_AS (Unicode only)

Unicode

Hungarian

0x40e

Hungarian_CI_AS

1250

Hungarian (Technical)

0x104e

Hungarian_Technical_CI_AS

1250

Icelandic

0x40f

Icelandic_CI_AS

1252

Indonesian

0x421

Latin1_General_CI_AS

1252

Italian (Italy)

0x410

Latin1_General_CI_AS

1252

Italian (Switzerland)

0x810

Latin1_General_CI_AS

1252

Japanese

0x411

Japanese_CI_AS

932

       

Kannada (India)3

0x44b

Indic_General_90_CI_AS (Unicode only)

Unicode

Kazakh (Kazakstan)1

0x43f

Kazakh_90_CI_AS

1251

Konkani (India)3

0x457

Indic_General_90_CI_AS (Unicode only)

Unicode

Korean (Extended Wansung)

0x0412

Korean_Wansung_CI_AS

949

Kyrgyz-Cyrillic (Republic of Kyrgyztan)

0x440

Cyrillic_General_CI_AS

1251

Latvian

0x426

Latvian_CI_AS

1257

Lithuanian

0x427

Lithuanian_CI_AS

1257

Macedonian (FYROM)

0x42f

Macedonian_FYROM_90_CI_AS

1251

Malay (Brunei Darussalam)

0x83e

Latin1_General_CI_AS

1252

Malay (Malaysia)

0x43e

Latin1_General_CI_AS

1252

Marathi (India)3

0x44e

Indic_General_90_CI_AS (Unicode only)

Unicode

Mongolian-Cyrillic (Mongolia)

0x450

Cyrillic_General_CI_AS

1251

Norwegian (Bokmal)

0x414

Danish_Norwegian_CI_AS

1252

Norwegian (Nynorsk)

0x814

Danish_Norwegian_CI_AS

1252

Polish

0x415

Polish_CI_AS

1250

Portuguese (Brazil)

0x416

Latin1_General_CI_AS

1252

Portuguese (Portugal)

0x816

Latin1_General_CI_AS

1252

Punjab-Gurmuhki (India)3

0x446

Indic_General_90_CI_AS (Unicode only)

Unicode

Romanian

0x418

Romanian_CI_AS

1250

Russian

0x419

Cyrillic_General_CI_AS

1251

Sanskrit (India)3

0x44f

Indic_General_90_CI_AS (Unicode only)

Unicode

Serbian (Cyrillic)

0xc1a

Cyrillic_General_CI_AS

1251

Serbian (Latin)

0x81a

Cyrillic_General_CI_AS

1250

Slovak

0x41b

Slovak_CI_AS

1250

Slovenian

0x424

Slovenian_CI_AS

1250

Spanish (Argentina)

0x2c0a

Modern_Spanish_CI_AS

1252

Spanish (Bolivia)

0x400a

Modern_Spanish_CI_AS

1252

Spanish (Chile)

0x340a

Modern_Spanish_CI_AS

1252

Spanish (Colombia)

0x240a

Modern_Spanish_CI_AS

1252

Spanish (Costa Rica)

0x140a

Modern_Spanish_CI_AS

1252

Spanish (Dominican Republic)

0x1c0a

Modern_Spanish_CI_AS

1252

Spanish (Ecuador)

0x300a

Modern_Spanish_CI_AS

1252

Spanish (El Salvador)

0x440a

Modern_Spanish_CI_AS

1252

Spanish (Guatemala)

0x100a

Modern_Spanish_CI_AS

1252

Spanish (Honduras)

0x480a

Modern_Spanish_CI_AS

1252

Spanish (International Sort)

0xc0a

Modern_Spanish_CI_AS

1252

Spanish (Mexico)

0x80a

Modern_Spanish_CI_AS

1252

Spanish (Nicaragua)

0x4c0a

Modern_Spanish_CI_AS

1252

Spanish (Panama)

0x180a

Modern_Spanish_CI_AS

1252

Spanish (Paraguay)

0x3c0a

Modern_Spanish_CI_AS

1252

Spanish (Peru)

0x280a

Modern_Spanish_CI_AS

1252

Spanish (Puerto Rico)

0x500a

Modern_Spanish_CI_AS

1252

Spanish (Traditional Sort)

0x40a

Traditional_Spanish_CI_AS

1252

Spanish (Uruguay)

0x380a

Modern_Spanish_CI_AS

1252

Spanish (Venezuela)

0x200a

Modern_Spanish_CI_AS

1252

Swahili

0x441

Latin1_General_CI_AS

1252

Swedish

0x41d

Finnish_Swedish_CI_AS

1252

Swedish (Finland)

0x81d

Finnish_Swedish_CI_AS

1252

Syriac (Syria)1

0x45a

Syriac_90_CI_AS (Unicode only)

Unicode

Tamil (India)1

0x449

Indic_General_90_CI_AS (Unicode only)

Unicode

Tatar (Tatarstan)1

0x444

Tatar_90_CI_AS

1251

Telugu (India)1

0x44a

Indic_General_90_CI_AS (Unicode only)

Unicode

Thai

0x41e

Thai_CI_AS

874

Turkish

0x41f

Turkish_CI_AS

1254

Ukrainian

0x422

Ukrainian_CI_AS

1251

Urdu

0x420

Arabic_CI_AS

1256

Uzbek (Latin)1

0x443

Uzbek_Latin_90_CI_AS

1254

Uzbek-Cyrillic (Republic of Uzbeckistan)

0x843

Cyrillic_General_CI_AS

1251

Vietnamese

0x42a

Vietnamese_CI_AS

1258

 

Conclusioni

In questo breve articolo abbiamo presentato la creazione di un database SQL Server cercando di mostrare a coloro che stanno iniziando ad usarlo che non è uno strumento banale ma anche che è necessario porsi delle domande precise sullo scenario dell'applicazione quando si crea delle basi dati e i programmi che le utilizzeranno.

Proseguiremo le nozioni di base su SQL Server nella prossima puntata parlando di come generare le tabelle di un database.

Per Vedere come creare il Database da SQL Management studio, potete leggere la prima parte di questo articolo disponibile qui

Per usare i comandi SQL per via programmatica via ADO.NET potete leggere i 2 articoli dedicati alla libreria base per i comandi diretti a SQL Server:

Per qualsiasi Feedback, Ulteriore domanda, Chiarimento, oppure se trovate qualche errore usate direttamente il form dei commenti in calce a questo articolo oppure scrivete all'autrice .



       
Articoli|Webcast|Risorse|Utility
© 2007-2010 by DotNetWork  .:.  Terms Of Use  .:.  Privacy Statement  .:.  Login  .:.