Cercare Tabella in SQL Server

martedì 20 giugno 2006 - 09.45

paolomanfrin Profilo | Newbie

Salve a tutti...
Volevo sapere se qualcuno conosce un modo per verificare l'esistenza di una tabella in SQL Server...

Mi serve per concedere / vietare operazioni se la tabella è gia presente.
Grazie

Paolo Manfrin

lbenaglia Profilo | Guru

>Volevo sapere se qualcuno conosce un modo per verificare l'esistenza
>di una tabella in SQL Server...

Ciao Paolo,

potresti servirti della funzione OBJECT_ID:

USE AdventureWorks; GO IF OBJECT_ID('HumanResources.Employee') IS NULL PRINT 'La tabella HumanResources.Employee non esiste.'; ELSE PRINT 'La tabella HumanResources.Employee esiste.'; GO /* Output: La tabella HumanResources.Employee esiste. */


>Grazie
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paolomanfrin Profilo | Newbie

Perfetto! Grazie...

Per caso sai come potrei inserire tale comando in C# e ottenere la risposta?! Grazie comunque per il suggerimento. Molto Utile.
Paolo

lbenaglia Profilo | Guru

>Per caso sai come potrei inserire tale comando in C# e ottenere
>la risposta?!

Io definirei una stored procedure parametrica che riceve in input il nome della tabella e che restituisca 1 se la tabella esiste e 0 se non esiste.
Lato client esegurei il tutto con un oggetto sqlCommand.

> Grazie comunque per il suggerimento. Molto Utile.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Brainkiller Profilo | Guru

>Perfetto! Grazie...
>Per caso sai come potrei inserire tale comando in C# e ottenere
>la risposta?! Grazie comunque per il suggerimento. Molto Utile.

Ciao Paolo,
alcuni usano anche la tecnica di fare una qualsiasi query da C# sulla tabella di cui verificarne l'esistenza tipo:

SELECT COUNT (*) FROM Tabella_da_verificare

e mettere il tutto in un try..catch se va in eccezione la tabella non esiste.
Ma non è uno dei miei metodi preferiti.
Ciao



David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

paolomanfrin Profilo | Newbie

Grazie Della risposta....

Avevo adottato anch'io inizialmente questa soluzione ma la trovavo... "poco professionale"... ;-)

Comunque Grazie per l'interessamento.
Paolo

lbenaglia Profilo | Guru

>Avevo adottato anch'io inizialmente questa soluzione ma la trovavo...
>"poco professionale"... ;-)

Diciamo che fa proprio schifo
Se la tabella ha milioni di righe sovraccarichi server, rete e client per niente.
Inoltre è molto più onerosa dal punto di vista computazionale rispetto alla soluzione proposta

A questo punto potresti frugare nei metadati utilizzando l'INFORMATION_SCHEMA TABLES:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'schema' AND TABLE_NAME = N'tabella';

Se il result set è vuoto significa che la tabella non esiste. 0 eccezioni e codice MOLTO più efficiente rispetto alla soluzione "poco professionale"

Io resto dell'idea di incapsulare il tutto in una sp che restituisca 1 o 0, utilizzando la funzione OBJECT_ID() o eventualmente la query appena vista.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5