2011-12-13 8 views
26

Czy istnieje skrypt, za pomocą którego można znaleźć wszystkie kolumny we wszystkich tabelach w katalogu SQL, który nie ma zestawienia <database default>?Znajdź domyślne zestawienie dla kolumn dla wszystkich tabel w SQL Server

Przejmowałem starszą wersję systemu i stosowałem różne sortowania w niektórych tabelach i chciałbym znaleźć wszystkie wystąpienia w jednym trafieniu, a nie ręcznie.

Jednak nie chcę zmieniać tej opcji programowo, ponieważ chciałbym przejrzeć każdą tabelę jeden po drugim.

enter image description here

Odpowiedz

64

Spróbuj tego skryptu tutaj:

DECLARE @DatabaseCollation VARCHAR(100) 

SELECT 
    @DatabaseCollation = collation_name 
FROM 
    sys.databases 
WHERE 
    database_id = DB_ID() 

SELECT 
    @DatabaseCollation 'Default database collation' 

SELECT 
    t.Name 'Table Name', 
    c.name 'Col Name', 
    ty.name 'Type Name', 
    c.max_length, 
    c.collation_name, 
    c.is_nullable 
FROM 
    sys.columns c 
INNER JOIN 
    sys.tables t ON c.object_id = t.object_id 
INNER JOIN 
    sys.types ty ON c.system_type_id = ty.system_type_id  
WHERE 
    t.is_ms_shipped = 0 
    AND 
    c.collation_name <> @DatabaseCollation 

Sprawdza dla domyślnego sortowania bazy danych, a następnie znajdzie żadnych kolumn, które nie są zgodne z tym.

+1

Spot, dzięki bardzo. Przyjmie to jako odpowiedź, gdy tylko minie "5 minut"! – Rippo

+0

Dzięki, zaoszczędziło mi to wiele czasu :) – Pking

+0

Świetna odpowiedź, myślę, że jest jednak drobny błąd. Połączenie na system_type_id może tworzyć zduplikowane wyniki, jeśli baza danych ma niestandardowe typy. Myślę, że sprzężenie powinno w rzeczywistości znajdować się na user_type_id. – PeteT

Powiązane problemy