fjkilken
asked on
How to list my SQL table column/field names?
HI,
I want to export a list of the column/field names of my SQL (server 2000) tables into an Excel sheet - any ideas on how to do this?
thanks
Fergal
I want to export a list of the column/field names of my SQL (server 2000) tables into an Excel sheet - any ideas on how to do this?
thanks
Fergal
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Richard,
The view definition is not relevant here.
The information_schema views are provided by SQL Server to make life easier for DBAs and developpers, whithout messing around with the system tables.
information_schema views should be used whenever it's possible, since system tables will change in SQL server 2005.
So either you use the view or not, but using the code inside it kindof defeats the purpose of the view ...
Or did I miss something in your comment >>Which is a LITTLE bit of a mouthful!<<
Regards
Hilaire
The view definition is not relevant here.
The information_schema views are provided by SQL Server to make life easier for DBAs and developpers, whithout messing around with the system tables.
information_schema views should be used whenever it's possible, since system tables will change in SQL server 2005.
So either you use the view or not, but using the code inside it kindof defeats the purpose of the view ...
Or did I miss something in your comment >>Which is a LITTLE bit of a mouthful!<<
Regards
Hilaire
Hi,
An easy way to do this....
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (TABLE_NAME = 'your table name')
An easy way to do this....
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (TABLE_NAME = 'your table name')
TRY THIS STATEMENT
SELECT C.NAME FROM SYSCOLUMNS C
INNER JOIN SYSOBJECT O
ON C.ID = O.ID WHERE O.NAME ='TABLENAME'
NOTE: USE THIS STATEMENT IN DTS OR IN QUERY ANALYZER TAKE RESULT IN GRID AND COPY PASTE IN EXCEL.
Step 1) Use sp_columns 'tablename' function to list all columns & data types for the given table.
Step 21) You may then export the returned list to a file
Or
Step 22) Join Sysobjects (so) to SysColumns (sc) table on [id] & select so.name & sc.name order by so.name, sc.name , sc.colorder to get all tables & their columns.
Paste this script into an Excel document macro, edit the DSN to reflect your server,database, and password.
Have Fun!
Ther are two macros. The Columns macro will genrate a list of TABLES and COLUMS.
'------------------------- ----
Function DSN()
'Choose one of these formats and set DSN equal to the correct data source
'Need to set: {DSN=|SERVER=};UID=;PWD=;D ATABASE=;
'With Pre-Defined ODBC DSN
DSN1 = "ODBC;DSN=Great Plains KK;UID=DYNSA;PWD=0129;DATA BASE=TEST; "
'Direct DSN Definition
DSN2 = "ODBC;DRIVER=SQL Server;SERVER=SQLSRV;UID=s a;PWD=0129 ;DATABASE= TEST"
'Select the one to use
DSN = DSN2
End Function
Sub Tables()
Q = ""
Q = Q & " SELECT DISTINCT"
Q = Q & " [sysobjects].[name] AS Table_Name"
'Q = Q & " , [systypes].[name] as Xtype"
'Q = Q & " , [syscolumns].[xtype]"
'Q = Q & " , [syscolumns].[xusertype]"
'Q = Q & " , [syscolumns].[length]"
'Q = Q & " , [cdefault]"
'Q = Q & " , [syscolumns].[domain]"
'Q = Q & " , [syscolumns].[collationid] "
'Q = Q & " , [syscolumns].[type]"
'Q = Q & " , [syscolumns].[usertype]"
'Q = Q & " , [syscolumns].[prec]"
'Q = Q & " , [syscolumns].[scale]"
'Q = Q & " , [iscomputed]"
'Q = Q & " , [isoutparam]"
'Q = Q & " , [isnullable]"
Q = Q & " FROM [syscolumns], [sysobjects], [systypes]"
Q = Q & " where [syscolumns].[ID] = [sysobjects].[ID]"
Q = Q & " and [sysobjects].[xtype] in ('V', 'U')"
Q = Q & " and [syscolumns].[xtype]=[syst ypes].[xty pe]"
'Q = Q & " and [syscolumns].[id]> 100"
'Q = Q & " order by ParentObj,[syscolumns].[na me]"
doquery Q, "Tables"
End Sub
Sub Columns()
Q = ""
Q = Q & " SELECT [syscolumns].[name]"
Q = Q & " , [sysobjects].[name] AS ParentObj"
Q = Q & " , [systypes].[name] as Xtype"
Q = Q & " , [syscolumns].[xtype]"
Q = Q & " , [syscolumns].[xusertype]"
Q = Q & " , [syscolumns].[length]"
'Q = Q & " , [cdefault]"
'Q = Q & " , [syscolumns].[domain]"
'Q = Q & " , [syscolumns].[collationid] "
Q = Q & " , [syscolumns].[type]"
Q = Q & " , [syscolumns].[usertype]"
Q = Q & " , [syscolumns].[prec]"
Q = Q & " , [syscolumns].[scale]"
'Q = Q & " , [iscomputed]"
'Q = Q & " , [isoutparam]"
'Q = Q & " , [isnullable]"
Q = Q & " FROM [syscolumns], [sysobjects], [systypes]"
Q = Q & " where [syscolumns].[ID] = [sysobjects].[ID]"
Q = Q & " and [sysobjects].[xtype] in ('V', 'U')"
Q = Q & " and [syscolumns].[xtype]=[syst ypes].[xty pe]"
'Q = Q & " and [syscolumns].[id]> 100"
Q = Q & " order by ParentObj,[syscolumns].[na me]"
doquery Q, "Columns"
End Sub
Sub Objects()
Q = ""
Q = Q & " SELECT [A].[name]"
'Q = Q & ", [A].[id]"
Q = Q & " , CASE [A].[xtype]"
Q = Q & " WHEN 'C' Then '4 Constraint'"
Q = Q & " WHEN 'D' Then '5 Default'"
Q = Q & " WHEN 'F' Then '6 Foreign'"
Q = Q & " WHEN 'L' Then '9 Log'"
Q = Q & " WHEN 'FN' Then '8 Scaler Function'"
Q = Q & " WHEN 'IF' Then '9 Inline Table'"
Q = Q & " WHEN 'P' Then '7 Procedure'"
Q = Q & " WHEN 'PK' Then '1 Primary Key'"
Q = Q & " WHEN 'RF' Then '9 Filter'"
Q = Q & " WHEN 'S' Then '9 System Table'"
Q = Q & " WHEN 'TF' Then '8 Table Function'"
Q = Q & " WHEN 'TR' Then '7 Trigger'"
Q = Q & " WHEN 'U' Then '0 User Table'"
Q = Q & " WHEN 'UQ' Then '2 Unique'"
Q = Q & " WHEN 'V' Then '3 View'"
Q = Q & " WHEN 'X' Then 'Extended Proc'"
Q = Q & " Else '9 Unknown'"
Q = Q & " END As Xtype"
'Q = Q & " ,[A].[parent_obj], [B].[name] as Parent, [A].[type]"
Q = Q & " ,[B].[name] as Parent, [A].[type]"
Q = Q & " FROM [sysobjects] AS A LEFT JOIN [sysobjects] AS B"
Q = Q & vbCrLf
Q = Q & " ON [A].[parent_obj]=B.[id]"
'Q = Q & " where [Xtype] in ('U','V','P')"
'Q = Q & " WHERE [A].[parent_obj]=B.[id]"
Q = Q & " order by [A].[Xtype],[A].[name]"
doquery Q, "Objects"
End Sub
Sub Procs()
Q = ""
Q = Q & " SELECT [syscolumns].[name]"
Q = Q & " , [sysobjects].[name] AS Parent"
Q = Q & " , [systypes].[name] as Xtype"
Q = Q & " , [syscolumns].[xtype]"
Q = Q & " , [syscolumns].[xusertype]"
Q = Q & " , [syscolumns].[length]"
Q = Q & " , [cdefault]"
Q = Q & " , [syscolumns].[domain]"
Q = Q & " , [syscolumns].[collationid] "
Q = Q & " , [syscolumns].[type]"
Q = Q & " , [syscolumns].[usertype]"
Q = Q & " , [syscolumns].[prec]"
Q = Q & " , [syscolumns].[scale]"
Q = Q & " , [iscomputed]"
Q = Q & " , [isoutparam]"
Q = Q & " , [isnullable]"
Q = Q & " FROM [syscolumns], [sysobjects], [systypes]"
Q = Q & " where [syscolumns].[ID] = [sysobjects].[ID]"
Q = Q & " and [sysobjects].[xtype] in ('P','X','IF','FN')"
Q = Q & " and [syscolumns].[xtype]=[syst ypes].[xty pe]"
'Q = Q & " and [syscolumns].[id]> 100"
Q = Q & " order by Parent,[sysobjects].[xtype ]"
doquery Q, "ProcsPrameters"
End Sub
Sub doquery(Q, N)
X = ActiveSheet.Cells(1, 1)
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveSheet.Cells(1, 1) = X
With ActiveSheet.QueryTables.Ad d(Connecti on:=DSN, Destination:=Range("A2"))
.CommandText = Q
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Name = N
End Sub
Have Fun!
Ther are two macros. The Columns macro will genrate a list of TABLES and COLUMS.
'-------------------------
Function DSN()
'Choose one of these formats and set DSN equal to the correct data source
'Need to set: {DSN=|SERVER=};UID=;PWD=;D
'With Pre-Defined ODBC DSN
DSN1 = "ODBC;DSN=Great Plains KK;UID=DYNSA;PWD=0129;DATA
'Direct DSN Definition
DSN2 = "ODBC;DRIVER=SQL Server;SERVER=SQLSRV;UID=s
'Select the one to use
DSN = DSN2
End Function
Sub Tables()
Q = ""
Q = Q & " SELECT DISTINCT"
Q = Q & " [sysobjects].[name] AS Table_Name"
'Q = Q & " , [systypes].[name] as Xtype"
'Q = Q & " , [syscolumns].[xtype]"
'Q = Q & " , [syscolumns].[xusertype]"
'Q = Q & " , [syscolumns].[length]"
'Q = Q & " , [cdefault]"
'Q = Q & " , [syscolumns].[domain]"
'Q = Q & " , [syscolumns].[collationid]
'Q = Q & " , [syscolumns].[type]"
'Q = Q & " , [syscolumns].[usertype]"
'Q = Q & " , [syscolumns].[prec]"
'Q = Q & " , [syscolumns].[scale]"
'Q = Q & " , [iscomputed]"
'Q = Q & " , [isoutparam]"
'Q = Q & " , [isnullable]"
Q = Q & " FROM [syscolumns], [sysobjects], [systypes]"
Q = Q & " where [syscolumns].[ID] = [sysobjects].[ID]"
Q = Q & " and [sysobjects].[xtype] in ('V', 'U')"
Q = Q & " and [syscolumns].[xtype]=[syst
'Q = Q & " and [syscolumns].[id]> 100"
'Q = Q & " order by ParentObj,[syscolumns].[na
doquery Q, "Tables"
End Sub
Sub Columns()
Q = ""
Q = Q & " SELECT [syscolumns].[name]"
Q = Q & " , [sysobjects].[name] AS ParentObj"
Q = Q & " , [systypes].[name] as Xtype"
Q = Q & " , [syscolumns].[xtype]"
Q = Q & " , [syscolumns].[xusertype]"
Q = Q & " , [syscolumns].[length]"
'Q = Q & " , [cdefault]"
'Q = Q & " , [syscolumns].[domain]"
'Q = Q & " , [syscolumns].[collationid]
Q = Q & " , [syscolumns].[type]"
Q = Q & " , [syscolumns].[usertype]"
Q = Q & " , [syscolumns].[prec]"
Q = Q & " , [syscolumns].[scale]"
'Q = Q & " , [iscomputed]"
'Q = Q & " , [isoutparam]"
'Q = Q & " , [isnullable]"
Q = Q & " FROM [syscolumns], [sysobjects], [systypes]"
Q = Q & " where [syscolumns].[ID] = [sysobjects].[ID]"
Q = Q & " and [sysobjects].[xtype] in ('V', 'U')"
Q = Q & " and [syscolumns].[xtype]=[syst
'Q = Q & " and [syscolumns].[id]> 100"
Q = Q & " order by ParentObj,[syscolumns].[na
doquery Q, "Columns"
End Sub
Sub Objects()
Q = ""
Q = Q & " SELECT [A].[name]"
'Q = Q & ", [A].[id]"
Q = Q & " , CASE [A].[xtype]"
Q = Q & " WHEN 'C' Then '4 Constraint'"
Q = Q & " WHEN 'D' Then '5 Default'"
Q = Q & " WHEN 'F' Then '6 Foreign'"
Q = Q & " WHEN 'L' Then '9 Log'"
Q = Q & " WHEN 'FN' Then '8 Scaler Function'"
Q = Q & " WHEN 'IF' Then '9 Inline Table'"
Q = Q & " WHEN 'P' Then '7 Procedure'"
Q = Q & " WHEN 'PK' Then '1 Primary Key'"
Q = Q & " WHEN 'RF' Then '9 Filter'"
Q = Q & " WHEN 'S' Then '9 System Table'"
Q = Q & " WHEN 'TF' Then '8 Table Function'"
Q = Q & " WHEN 'TR' Then '7 Trigger'"
Q = Q & " WHEN 'U' Then '0 User Table'"
Q = Q & " WHEN 'UQ' Then '2 Unique'"
Q = Q & " WHEN 'V' Then '3 View'"
Q = Q & " WHEN 'X' Then 'Extended Proc'"
Q = Q & " Else '9 Unknown'"
Q = Q & " END As Xtype"
'Q = Q & " ,[A].[parent_obj], [B].[name] as Parent, [A].[type]"
Q = Q & " ,[B].[name] as Parent, [A].[type]"
Q = Q & " FROM [sysobjects] AS A LEFT JOIN [sysobjects] AS B"
Q = Q & vbCrLf
Q = Q & " ON [A].[parent_obj]=B.[id]"
'Q = Q & " where [Xtype] in ('U','V','P')"
'Q = Q & " WHERE [A].[parent_obj]=B.[id]"
Q = Q & " order by [A].[Xtype],[A].[name]"
doquery Q, "Objects"
End Sub
Sub Procs()
Q = ""
Q = Q & " SELECT [syscolumns].[name]"
Q = Q & " , [sysobjects].[name] AS Parent"
Q = Q & " , [systypes].[name] as Xtype"
Q = Q & " , [syscolumns].[xtype]"
Q = Q & " , [syscolumns].[xusertype]"
Q = Q & " , [syscolumns].[length]"
Q = Q & " , [cdefault]"
Q = Q & " , [syscolumns].[domain]"
Q = Q & " , [syscolumns].[collationid]
Q = Q & " , [syscolumns].[type]"
Q = Q & " , [syscolumns].[usertype]"
Q = Q & " , [syscolumns].[prec]"
Q = Q & " , [syscolumns].[scale]"
Q = Q & " , [iscomputed]"
Q = Q & " , [isoutparam]"
Q = Q & " , [isnullable]"
Q = Q & " FROM [syscolumns], [sysobjects], [systypes]"
Q = Q & " where [syscolumns].[ID] = [sysobjects].[ID]"
Q = Q & " and [sysobjects].[xtype] in ('P','X','IF','FN')"
Q = Q & " and [syscolumns].[xtype]=[syst
'Q = Q & " and [syscolumns].[id]> 100"
Q = Q & " order by Parent,[sysobjects].[xtype
doquery Q, "ProcsPrameters"
End Sub
Sub doquery(Q, N)
X = ActiveSheet.Cells(1, 1)
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveSheet.Cells(1, 1) = X
With ActiveSheet.QueryTables.Ad
.CommandText = Q
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Name = N
End Sub
The view is ...
SELECT db_name() AS TABLE_CATALOG, user_name(obj.uid) AS TABLE_SCHEMA, obj.name AS TABLE_NAME, col.name AS COLUMN_NAME,
col.colid AS ORDINAL_POSITION, com.text AS COLUMN_DEFAULT, CASE col.isnullable WHEN 1 THEN 'YES' ELSE 'No ' END AS IS_NULLABLE,
spt_dtp.LOCAL_TYPE_NAME AS DATA_TYPE, CONVERT(int, OdbcPrec(col.xtype, col.length, col.xprec) + spt_dtp.charbin)
AS CHARACTER_MAXIMUM_LENGTH, CONVERT(int, spt_dtp.charbin + CASE WHEN spt_dtp.LOCAL_TYPE_NAME IN ('nchar', 'nvarchar', 'ntext')
THEN 2 * OdbcPrec(col.xtype, col.length, col.xprec) ELSE OdbcPrec(col.xtype, col.length, col.xprec) END) AS CHARACTER_OCTET_LENGTH,
NULLIF (col.xprec, 0) AS NUMERIC_PRECISION, spt_dtp.RADIX AS NUMERIC_PRECISION_RADIX, col.scale AS NUMERIC_SCALE,
spt_dtp.SQL_DATETIME_SUB AS DATETIME_PRECISION, CONVERT(sysname, NULL) AS CHARACTER_SET_CATALOG, CONVERT(sysname, NULL)
AS CHARACTER_SET_SCHEMA, CONVERT(sysname, CASE WHEN spt_dtp.LOCAL_TYPE_NAME IN ('char', 'varchar', 'text')
THEN a_cha.name WHEN spt_dtp.LOCAL_TYPE_NAME IN ('nchar', 'nvarchar', 'ntext') THEN N'Unicode' ELSE NULL END) AS CHARACTER_SET_NAME,
CONVERT(sysname, NULL) AS COLLATION_CATALOG, CONVERT(sysname, NULL) AS COLLATION_SCHEMA, col.collation AS COLLATION_NAME,
CONVERT(sysname, CASE WHEN typ.xusertype > 256 THEN DB_NAME() ELSE NULL END) AS DOMAIN_CATALOG, CONVERT(sysname,
CASE WHEN typ.xusertype > 256 THEN USER_NAME(obj.uid) ELSE NULL END) AS DOMAIN_SCHEMA, CONVERT(sysname,
CASE WHEN typ.xusertype > 256 THEN typ.name ELSE NULL END) AS DOMAIN_NAME
FROM sysobjects obj, master.dbo.spt_datatype_in
syscomments com ON col.cdefault = com.id AND com.colid = 1, master.dbo.syscharsets a_cha
WHERE permissions(obj.id, col.name) != 0 AND obj.id = col.id AND typ.xtype = spt_dtp.ss_dtype AND (spt_dtp.ODBCVer IS NULL OR
spt_dtp.ODBCVer = 2) AND obj.xtype IN ('U', 'V') AND col.xusertype = typ.xusertype AND (spt_dtp.AUTO_INCREMENT IS NULL OR
spt_dtp.AUTO_INCREMENT = 0) AND a_cha.id = isnull(CONVERT(tinyint, CollationPropertyFromID(co
ServerProperty('sqlcharset
Which is a LITTLE bit of a mouthful!
Richard.