MSDE Altre istruzioni per l'uso (parte 4) - Creare/Eliminare Tabelle in un Database
a cura di Sabrina Cosolo (requisiti: Livello intemedio di conoscenza generale)Creare una Tabella in un Database Via Codice SQL
La creazione di una Tabella su SQL Server è un comando SQL che fa parte di quello che viene chiamato DDL (Data Definition Language). Deve essere lanciata collegandosi a SQL Server con un utente che abbia diritti di amministrazione sul database in cui si vuole generare la tabella; è consigliabile utilizzare sempre l'utente SA o un utente Windows del gruppo Builtin\Administrator per questo tipo di istruzioni, in quanto la gestione utente di SQL Server permette delle "sottili" implementazioni relative ai ruoli degli utenti le quali potrebbero generare comportamenti apparentemente anomali per un utente inesperto; ad esempio potrebbe succedere che, una volta creata la tabella col proprio utente, gli altri utenti non la possano vedere o modificare. Ne accenno solo come "Avviso ai naviganti", in quanto la trattazione dell'argomento utenti, sicurezza e amministrazione del server costituisce argomento di un corso Microsoft di 5 giorni, non certo di questi articoli.Di seguito il codice SQL per la creazione delle tabelle nel database di esempio già utilizzato nella prima serie di articoli:
CREATE TABLE [dbo].[tbBrani] ( [idBrano] [int] IDENTITY (1, 1) NOT NULL , [numBrano] [int] NULL , [TitoloBrano] [nvarchar] (128) NULL , [idCd] [int] NULL , [idInterprete] [int] NULL , [idRitmo] [int] NULL , [idCatMuscale] [int] NULL ) ON [PRIMARY] CREATE TABLE [dbo].[tbCaseDisc] ( [idCasaDisc] [int] IDENTITY (1, 1) NOT NULL , [Nome] [nvarchar] (128) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[tbCatMusicali] ( [idCatMusicale] [int] IDENTITY (1, 1) NOT NULL , [Nome] [nvarchar] (50) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[tbCate] ( [idCate] [int] IDENTITY (1, 1) NOT NULL , [Nome] [nvarchar] (50) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[tbCd] ( [idcd] [int] IDENTITY (1, 1) NOT NULL , [Titolo] [nvarchar] (128) , [idInterprete] [int] NULL , [anno] [int] NULL , [idCasadisc] [int] NULL , [idCate] [int] NULL , [idCdISBN] [nvarchar] (16) NULL , [DataIns] [DateTime] Null ) ON [PRIMARY] CREATE TABLE [dbo].[tbInterpreti] ( [idInterprete] [int] IDENTITY (1, 1) NOT NULL , [Nome] [nvarchar] (128) NULL , [TiPers] [nvarchar] (1) NULL , [idGruppo] [int] NULL ) ON [PRIMARY] CREATE TABLE [dbo].[tbRitmi] ( [idRitmo] [int] IDENTITY (1, 1) NOT NULL , [Nome] [nvarchar] (50) NULL ) ON [PRIMARY]Vediamo ora di dare una sintassi di base del comando e di commentarlo in dettaglio:
CREATE TABLE [owner].[tablename] ( [nomecampo][tipodati](dimensione) [NOT] NULL [IDENTITY (seed,increment)], [nomecampo][tipodati](dimensione) [NOT] NULL, ) ON [PRIMARY]Diamo un significato agli elementi usati nella sintassi del comando:
- owner: L'owner (proprietario) della tabella; è l'utente logico a cui la tabella creata appartiene, non specificando questo dato, la tabella viene assegnata all'utente che la crea. Se l'utente appartiene al gruppo dei System Administrator, automaticamente viene usato l'alias standard dbo (Database owner).
Se la tabella non appartiene al dbo, affinché sia accessibile ad altri utenti deve essere resa pubblica dal proprietario dando specificamente i diritti di accesso agli altri utenti.
Per questo è consigliabile creare sempre le tabelle e gli oggetti di un database con l'utente System Administrator fatto salvo i casi (a mio avviso davvero rari) in cui debbano essere costruite tabelle private per i singoli utenti.- tablename: Il nome della tabella; può essere composto da lettere e cifre e underscore e (volendo farsi del male) spazi, deve essere univoco all'interno del database, è assolutamente sconsigliato inserirvi i seguenti caratteri: - (meno) che in SQL è utilizzato per i commenti, " (virgolette) àèìòù (Lettere accentate o caratteri specifici di una lingua). Ovviamente non è proibito utilizzare anche i caratteri speciali o gli spazi, solo che poi le parolacce quando costruirete gli script in SQL le direte voi.
- nomecampo: Il nome del campo della tabella; segue la notazione del nome tabella.
- tipodati: Tipo del dato; può essere uno dei tanti tipi di dati standard che SQL Server mette a disposizione oppure uno dei dati definiti dall'utente che abbiamo generato nell'articolo precedente. Abbiamo volutamente usato i tipi di dato standard per creare esempi semplici, volendo usare per definire una delle nostre tabelle i dati da noi creati la sintassi sarebbe stata la seguente:
CREATE TABLE [tbBrani] ( [idBrano] [UDtID] IDENTITY (1, 1) NOT NULL , [numBrano] [UDtID] NULL , [TitoloBrano] [UDtDesLong] NULL , [idCd] [UDtID] NULL , [idInterprete] [UDtID] NULL , [idRitmo] [UDtID] NULL , [idCatMuscale] [UDtID] NULL ) ON [PRIMARY]dimensione: la dimensione va indicata esclusivamente sui dati che la prevedono, ovvero i campi di tipo char, varchar, nchar, nvarchar. NULL o NOT NULL indica se il campo permette l'inserimento del valore NULLO oppure no, i campi chiave primaria non possono permettere l'inserimento del valore NULLO, un DB Administrator intelligente prevederà inoltre dei valori di Default per tutti i campi in cui è buona norma ci sia, ad esempio uno 0 sui campi numerici etc. IDENTITY (seed, increment) ovvero il campo è un contatore automatico, parte dal numero (seed) e viene incrementato di (increment). Ogni tabella permette l'inserimento di un solo campo identity. ON PRIMARY specifica in quale filegroup la tabella deve essere creata; i filegroup sono uno strumento per la costruzione di database complessi in cui si vuole separare le tabelle che compongono un database in diversi file fisici; questo si ottiene utilizzando i filegroup che possono essere generati con il database o aggiunti in seguito. Automaticamente SQL Server crea il filegroup PRIMARY in ogni database, perciò, se non gestite i filegroup, questa clausola è facoltativa. Anche i filegroup fanno parte di quella che è la gestione avanzata dei DB e della loro amministrazione e non saranno discussi in questa sede. Come avete potuto vedere, nella creazione delle tabelle abbiamo volutamente evitato di inserire le definizioni relative ai vincoli (il più semplice è la chiave primaria) in quanto saranno trattati in un capitolo a sé. Per vostra conoscenza è possibile inserire la creazione di vincoli (Chiavi primarie, chiavi univoche, foreign key etc.) anche direttamente nell'istruzione Create Table. A coloro che volessero progettare una applicazione complessa io consiglierei comunque di costruire script separati per questioni di manutenzione e di chiarezza nel codice.
Eliminare una tabella in un Database via codice SQL
Come sempre eliminare è più facile che creare, quindi ecco il comando per eliminare le tabelle da noi costruite:DROP TABLE [dbo].[tbBrani] DROP TABLE [dbo].[tbCaseDisc] DROP TABLE [dbo].[tbCatMusicali] DROP TABLE [dbo].[tbCate] DROP TABLE [dbo].[tbCD] DROP TABLE [dbo].[tbInterpreti] DROP TABLE [dbo].[tbRitmi]La sintassi di base del comando è:
DROP TABLE [owner].[tablename]Dove owner e tablename corrispondono alle definizioni date in precedenza.
Anche per questi comandi SQL si può utilizzare OSQL.EXE (vedi, anche per i parametri).
La sintassi per chiamare un comando SQL usando OSQL è la seguente:
osql -S Localhost -U SA -P as -i creatbosql.sqlUn possibile file di input da utilizzare per realizzare uno degli esempi creautbosql.sql è un file di testo contenente il comando da eseguire che è leggermente diverso da quello sopra descritto, riporto la sintassi per la creazione della tabella brani:
USE MusicBox GO CREATE TABLE [dbo].[tbBrani] ( [idBrano] [int] IDENTITY (1, 1) NOT NULL , [numBrano] [int] NULL , [TitoloBrano] [nvarchar] (128) NULL , [idCd] [int] NULL , [idInterprete] [int] NULL , [idRitmo] [int] NULL , [idCatMuscale] [int] NULL ) ON [PRIMARY] GO QUITIl comando USE MUSICBOX serve a dire al server che dobbiamo lavorare sul Database Musicbox (database di esempio creato nel precedente articolo), Il comando GO esegue i comandi richiesti, il comando QUIT esce da OSQL.EXE che altrimenti si comporta come un Interprete comandi e rimane attivo all'interno della finestra console.
La sintassi da usare con OSQL per trasportarvi tutti gli script da noi generati in questa pagina è la seguente:
USE Musicbox GO script da eseguire GO QUIT
<<< Creare/Eliminare Tipi dati utente, Default e Messaggi di sistema