Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara memilih nama kolom dari beberapa tabel di SQL Server 2000-2008 yang ada dalam kumpulan nama

Untuk SQL Server 2005 dan yang lebih baru

FWIW untuk versi SQL Server yang lebih baru Saya lebih suka tampilan katalog daripada INFORMATION_SCHEMA untuk alasan yang diuraikan dalam posting blog ini:

Kasus terhadap INFORMATION_SCHEMA tampilan

Lihat juga peringatan seperti ini pada topik TABEL (Transact-SQL) di MSDN:

Jadi kueri yang akan saya gunakan adalah sebagai berikut (memfilter objek sistem dan juga menghindari tabel #temp jika Anda menggunakan tempdb):

SELECT t.name, c.name
  FROM sys.tables AS t
  INNER JOIN sys.columns AS c
  ON t.[object_id] = c.[object_id]
  WHERE c.name IN (N'name', N'firstname', etc.)
  AND t.is_ms_shipped = 0
  AND t.name NOT LIKE '#%';

Untuk mengulangi ini untuk semua database:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
  UNION ALL SELECT db = N''' + name + ''', 
    t.name COLLATE Latin1_General_CI_AI, 
    c.name COLLATE Latin1_General_CI_AI
  FROM ' + QUOTENAME(name) + '.sys.tables AS t
  INNER JOIN ' + QUOTENAME(name) + 'sys.columns AS c
  ON t.[object_id] = c.[object_id]
  WHERE c.name IN (N''name'', N''firstname'', etc.)
  AND t.is_ms_shipped = 0
  AND t.name NOT LIKE ''#%'''
FROM sys.databases
-- WHERE ... -- probably don't need system databases at least

SELECT @sql = STUFF(@sql, 1, 18, '') 
  -- you may have to adjust  ^^ 18 based on copy/paste, cr/lf, tabs etc.
  + ' ORDER BY by db, s.name, o.name';

EXEC sp_executesql @sql;

(COLLATE klausa ada untuk mencegah kesalahan dalam kasus di mana Anda memiliki database dengan susunan yang berbeda.)

Untuk SQL Server 2000

Perhatikan bahwa hal di atas tidak membantu untuk SQL Server 2000, tetapi saya tidak berpikir Anda harus menjadikannya tujuan untuk dapat menjalankan kueri yang sama pada setiap versi. SQL Server 2000 berusia 13 tahun dan beberapa tahun tidak didukung; tentunya Anda dapat membenarkan memiliki kode khusus untuk itu. Dalam hal ini saya masih akan memilih kueri yang Anda miliki daripada INFORMATION_SCHEMA , cukup filter objek sistem dan tabel temp (sekali lagi, hanya relevan jika Anda menggunakan tempdb):

SELECT [object] = so.name, [column] = sc.name, 
  [type]  = st.name,   [precision] = st.xprec, 
  [scale] = st.xscale, st.length
FROM sysobjects AS so
INNER JOIN syscolumns AS sc
ON  so.id = sc.id
INNER JOIN systypes AS st
ON sc.xtype = st.xtype
WHERE sc.name IN 
  (N'first', N'fname', N'firstname', N'namef', N'namefirst', N'name')
AND so.name NOT LIKE '#%'
AND OBJECTPROPERTY(so.id, 'IsMsShipped') = 0;

Anda dapat melakukan ini untuk setiap database di SQL Server 2000 juga, tetapi karena Anda tidak dapat menggunakan NVARCHAR(MAX) Anda harus menggunakan kursor, sekelompok variabel, atau sp_msforeachdb sangat tidak direkomendasikan .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan kolom turunan fungsi peringkat di mana klausa (SQL Server 2008)

  2. Bagaimana cara menyimpan gambar di kolom tabel database SQL Server

  3. Menggabungkan LIKE dengan IN dalam SQL

  4. Cara menampilkan bilah kemajuan saat menjalankan SQLCommand VB.Net besar

  5. Cara Memeriksa Pengaturan Konfigurasi untuk Database Mail di SQL Server (T-SQL)