2009-10-07 28 views
9

jaki sposób można wybrać wszystkie kolumny ze wszystkich tabel z DB, takie jak:Zaznacz wszystkie kolumny ze wszystkich tabel w SQL Server 2008

Select * From * 

w SQL Server 2008 ???

Lista tabel jest bardzo duża i zawiera tyle kolumn, czy można to zrobić bez wpisywania nazw kolumn?

A może dokonaj wyboru, który zwróci nazwę tabel.

+7

Dlaczego chcesz to zrobić? –

+1

To naprawdę nie ma sensu. Czego dokładnie oczekujesz od takiego zapytania? –

+0

Jeśli chcesz wstrzyknąć SQL, jest to jedna z prostszych rzeczy, które możesz wstrzyknąć, aby odzyskać dane meta schematu przychodzi na myśl. Aby to zrobić, wymagana jest instrukcja przy użyciu widoków systemowych itp., Ale widzisz co mam na myśli. – Andrew

Odpowiedz

28

SQL to zrobi to ...

DECLARE @SQL AS VarChar(MAX) 
SET @SQL = '' 

SELECT @SQL = @SQL + 'SELECT * FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13) 
FROM INFORMATION_SCHEMA.TABLES 

EXEC (@SQL) 
+1

w jaki sposób wydrukowałbyś 'table_name' dla każdego wyniku? – Kuncevic

+0

@Kuncevic, Jeśli chcesz uwzględnić nazwę tabeli w każdym zestawie wyników, po prostu dodaj ją do @@ SQL (Zastąp podwójne znaki "na" pojedynczym): SELECT @@ SQL = @@ SQL + "SELECT" '' + TABLE_NAME + '' 'Nazwa tabeli AS, * Z' + TABLE_SCHEMA + '. [' + TABLE_NAME + ']' + CHAR (13) FROM INFORMATION_SCHEMA.TABLES – David

+0

ahh Robiłem dokładnie to samo, ale używając 1 pojedynczego cytatu '' + TABLE_NAME + ''- nie działało. zamiast używać 3 "" "+ TABLE_NAME +" "- to działa. – Kuncevic

3

Jest możliwe, aby pobrać nazwy wszystkich kolumn z sys.columns
Jest możliwe, aby pobrać nazwy wszystkich tabeli z sys.tables

But nie można pobrać wszystkich danych ze wszystkich tabel. Gdy tylko zapytanie dotyczy więcej niż jednej tabeli, konieczne jest JOIN. Jeśli nie podano warunków łączenia, tabele są łączone jako pełny produkt kartezjański, co oznacza, że ​​każdy wiersz z każdej tabeli jest dopasowywany do każdego wiersza z 11 innych tabel. Taka kwerenda, o jaką prosisz, wygenerowałaby dla 10 tabel z 10 rekordami po nie mniej niż 10e10 rekordów, tj. 100 miliardów rekordów. Jestem pewien, że tego nie chcesz.

Może gdyby pan wyjaśnić co co do osiągnięcia, nie jak, możemy pomóc lepiej.

Aby select * from każdym stole, jeden po drugim, można użyć nieudokumentowane, ale dobrze znany sp_msforeachtable:

sp_msforeachtable 'select * from ?' 
2

Jeśli masz zamiar wysłać do Excela, proponuję użyć Kreatora eksportu i po prostu wybierz wszystkie stoły tam. W przeglądarce obiektów umieść kursor na nazwie bazy danych i kliknij prawym przyciskiem myszy. Wybierz zadania - Eksportuj dane i postępuj zgodnie z instrukcjami kreatora. Dlaczego ktokolwiek chciałby, aby cała baza danych w Excelu była poza mną, ale to jest najlepszy sposób. Jeśli chcesz zrobić to więcej niż raz, możesz zapisać eksport w pakiecie SSIS.

7
SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where t.name = 'ProductItem' AND C.name like '%retail%' 
ORDER BY schema_name, table_name 
5

Spróbuj tego, działa prawidłowo

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

następnie można dodać

WHERE TABLE_NAME LIKE '' AND COLUMN_NAME LIKE '' 
Powiązane problemy