2011-12-13 12 views
26

Esiste uno script che è possibile utilizzare per trovare tutte le colonne in tutte le tabelle in un catalogo SQL che non ha la fascicolazione <database default>?Trova regole di confronto non predefinite sulle colonne per tutte le tabelle in SQL Server

Ho rilevato un sistema legacy e ho diverse regole di confronto in alcune tabelle e vorrei trovare tutte le istanze in un colpo piuttosto che passare manualmente.

Tuttavia, non desidero modificare le regole di confronto a livello di codice poiché vorrei esaminare ciascuna tabella una per una.

enter image description here

risposta

64

Prova questo script qui:

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 

Si verifica la presenza di regole di confronto predefinite del database e quindi rileva eventuali colonne che non rispettano questo.

+1

Spot on, grazie mille. Accetterà questo come risposta non appena i "5 minuti" sono scaduti! – Rippo

+0

Grazie, mi ha risparmiato un sacco di tempo :) – Pking

+0

Ottima risposta, penso che ci sia un piccolo problema però. Il join su system_type_id può creare risultati duplicati se il database ha tipi personalizzati. Penso che il join dovrebbe effettivamente essere su user_type_id. – PeteT

Problemi correlati