Una query per ricavare i nomi delle colonne della tabella

venerdì 22 giugno 2007 - 16.07

MagicBotolo Profilo | Newbie

Ciao a tutti, io devo estrarre i nomi delle colonne presenti in una tabella all'interno di un database. Ho provato con "SELECT TOP 0 * FROM Tabella" (ho provato anche con 1 al posto di 0). Qualcuno sa indicarmi un modo migliore?
Ciao!!

AndreaKpr Profilo | Senior Member

Ma ti serve in sql o devi sviluppare una procedura in vb o c# ???

MagicBotolo Profilo | Newbie

OOPPSS... scusate... io lavoro con Microsoft SQL Server e mi serve una query in SQL.
Ciao!!

lbenaglia Profilo | Guru

>OOPPSS... scusate... io lavoro con Microsoft SQL Server e mi
>serve una query in SQL.

Se utilizzi SQL Server 2000 puoi ricorrere alla INFORMATION_SCHEMA view COLUMNS, mentre con SQL Server 2005 puoi interrogare la Catalog View sys.columns:

USE AdventureWorks; /* Soluzione per SQL Server 2000/2005 */ SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = N'Person' AND TABLE_NAME = N'Contact'; /* Output: COLUMN_NAME ------------------------- ContactID NameStyle Title FirstName MiddleName LastName Suffix EmailAddress EmailPromotion Phone PasswordHash PasswordSalt AdditionalContactInfo rowguid ModifiedDate (15 row(s) affected) */ /* Soluzione per SQL Server 2005 */ SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('Person.Contact'); /* Output: name ------------------------- ContactID NameStyle Title FirstName MiddleName LastName Suffix EmailAddress EmailPromotion Phone PasswordHash PasswordSalt AdditionalContactInfo rowguid ModifiedDate (15 row(s) affected) */

Per maggiori informazioni fai riferimento ai seguenti paragrafi dei Books Online:

"COLUMNS (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms188348.aspx

"sys.columns (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms176106.aspx

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

TomClancy Profilo | Junior Member

... oppure potresti crearti una funzione del tipo...

if exists (select * from sysobjects where name = N'fn_Colonne') drop function fn_Colonne go create function fn_Colonne ( @ObjectID int ) returns varchar(8000) as begin declare @ElencoColonne varchar(8000), @ColName varchar(256) set @ElencoColonne = '' declare Columns_cursor cursor read_only for select name from syscolumns where Id = @ObjectID order by ColOrder open Columns_cursor fetch next from Columns_cursor INTO @ColName while @@fetch_status <> -1 begin if @@fetch_status <> -2 begin set @ElencoColonne = @ElencoColonne + ltrim(rtrim(@ColName)) + ', ' end fetch next from Columns_cursor into @ColName end if len(@ElencoColonne) > 1 set @ElencoColonne = left(@ElencoColonne, len(@ElencoColonne) -1) close Columns_cursor deallocate Columns_cursor return @ElencoColonne end go

NOTA: questo solo su SQL 2000 ( il 2005 per me è ancora materia oscura ... anzi visto che ci sono lancio un appello all'ottimo Lorenzo per un consiglio spassionato per un libro sul 2005 )

lbenaglia Profilo | Guru

>... oppure potresti crearti una funzione del tipo...
<SNIP>
Accedere direttamente alle tabelle di sistema non è mai una buona tecnica (per lo più tramite un cursore!) dato che prima di tutto occorrono dei permessi da sysadmin e secondo un banale service pack potrebbe modificarne la struttura.
Il mio consiglio è sempre quello di ricorrere agli strumenti adatti, come le INFORMATION_SCHEMA views in SQL Server 2000 e le Catalog Views in SQL Server 2005.

>NOTA: questo solo su SQL 2000 ( il 2005 per me è ancora materia
>oscura ... anzi visto che ci sono lancio un appello all'ottimo
>Lorenzo per un consiglio spassionato per un libro sul 2005 )
Per quanto riguarda il linguaggio Transaction SQL mi sento di consigliarti senza ombra di dubbio i 2 splendidi libri di Itzik:

- Inside Microsoft SQL Server 2005: T-SQL Querying
- Inside Microsoft SQL Server 2005: T-SQL Programming
http://www.sql.co.il/books/insidetsql2005

Se invece sei alla ricerca di un libro che spieghi dettagliatamente il funzionamento a basso livello del DB Engine, ti suggerisco il seguente libro di Kalen:

- Inside Microsoft SQL Server 2005: The Storage Engine
http://www.microsoft.com/MSPress/books/7436.asp

Ah, "ovviamente" questi libri sono in inglese e li puoi acquistare su Gorilla.it
http://www.gorilla.it/Shop/dett_articolo.html?idArt=145559
http://www.gorilla.it/Shop/dett_articolo.html?idArt=145517
http://www.gorilla.it/Shop/dett_articolo.html?idArt=145474

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

Bacca Profilo | Newbie

A me servirebbe conoscere le colonne di una tabella di un DB Access però da un progetto in VB.net , e' possibile?

Grazie per l'attenzione
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5