Metadaten: Information über SQL Tabellen u. Felder

/*
Metadaten: Information über SQL Tabellen u. Felder
*/
--V1 (einfach)
Select ORDINAL_POSITION, TABLE_SCHEMA, TABLE_NAME
       , IS_NULLABLE, COLUMN_DEFAULT
       , DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION
       , NUMERIC_PRECISION_RADIX, NUMERIC_SCALE, DATETIME_PRECISION

from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA='dbo'
    and TABLE_NAME='Errors'
Order by ORDINAL_POSITION

 

--V2 (ausführlicher)
Select c.ORDINAL_POSITION, c.TABLE_SCHEMA, c.TABLE_NAME, c.IS_NULLABLE, Coalesce(c.COLUMN_DEFAULT,'') as COLUMN_DEFAULT
,Case when pk.COLUMN_NAME is NULL then '' else 'PK' end as HAS_PRIMARY_KEY
--,c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH, c.NUMERIC_PRECISION, c.NUMERIC_PRECISION_RADIX, c.NUMERIC_SCALE, c.DATETIME_PRECISION
,CASE
WHEN c.[data_type] IN (
'tinyint'
,'smallint'
,'int'
,'bigint'
,'float'
)
THEN c.[data_type]
WHEN c.[data_type] IN ('bit')
THEN c.[data_type]
WHEN c.[data_type] IN ('decimal')
THEN c.[data_type] + '(' + CAST(c.[numeric_precision] AS NVARCHAR(10)) + ',' + CAST(c.[numeric_scale] AS NVARCHAR(10)) + ')'
WHEN c.[data_type] IN (
'smallmoney'
,'money'
)
THEN c.[data_type]
WHEN c.[data_type] IN (
'char'
,'nchar'
,'varchar'
,'nvarchar'
)
AND c.[character_maximum_length] < 0
THEN c.[data_type] + '(MAX)'
WHEN c.[data_type] IN (
'char'
,'nchar'
,'varchar'
,'nvarchar'
)
AND c.[character_maximum_length] >= 0
THEN c.[data_type] + '(' + CAST(c.[character_maximum_length] AS NVARCHAR(10)) + ')'
WHEN c.[data_type] IN (
'date'
,'time'
,'datetime'
)
THEN c.[data_type]
WHEN c.[data_type] IN ('datetime2')
THEN c.[data_type] + '(7)'
WHEN c.[data_type] IN ('uniqueidentifier')
THEN c.[data_type]
WHEN c.[data_type] IN ('xml')
THEN c.[data_type]
WHEN c.[data_type] IN ('geography')
THEN c.[data_type]
WHEN c.[data_type] IN ('hierarchyid')
THEN c.[data_type]
ELSE c.[data_type]
END AS [data_type_explicit]
from INFORMATION_SCHEMA.COLUMNS as c
left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE as pk
ON c.TABLE_CATALOG=pk.TABLE_CATALOG and c.TABLE_SCHEMA=pk.TABLE_SCHEMA and c.TABLE_NAME=pk.TABLE_NAME and c.COLUMN_NAME=pk.COLUMN_NAME
where c.TABLE_SCHEMA='dbo'
and c.TABLE_NAME='Errors'
Order by c.ORDINAL_POSITION

 

Eine SalesLogix Tabelle umbennen

 

/*

NOCH *NICHT* AUGETESTET!!!!

Eine SalesLogix Tabelle umbennen
openCRMS schrieb am 4. Oktober 2009 15:45
Es passiert jedem Entwickler einmal, dass er einen Tipp- oder Schreibfehler 
beim Erstellen einer SalesLogix-Tabelle im Architect macht. Da der Architect 
jedoch leider keine Option bietet eine Tabelle umzubenennen, muss man hierfür 
den Umweg über SQL gehen. Dies wiederum führt dazu, dass eine auf SQL Basis 
umbenannten Tabelle in SalesLogix nicht mehr korrekt nutzbar ist. Der Grund 
hierfür ist die Tatsache, dass beim Anlegen einer SalesLogix Tabelle im 
Databasemanager des Architects, der Tabellenname zugleich in mehreren Tabellen 
als Systeminformation gespeichert wird: 
in der Tabelle SECTABLEDEFS, RESYNCTABLEDEFS und JOINDATA.

Um diese Probleme zu umschiffen, habe ich das folgenden SQL-Script geschrieben, dass es mir erlaubt, eine SalesLogix-Tabelle, die ich im SQL Server Management Studio umbenannt habe, in SalesLogix wieder benutzen kann:
*/

Declare @myTable varchar(128)
Declare @newTableName varchar(128)

set @myTable = 'ALTER_NAME'
set @newTableName = 'NEUER_NAME'

select * from sysdba.SECTABLEDEFS where TABLENAME = @myTable

update sysdba.SECTABLEDEFS 
    set TABLENAME = @newTableName  
    where TABLENAME = @myTable

update sysdba.RESYNCTABLEDEFS
    set TABLENAME = @newTableName  
    where TABLENAME = @myTable    
    
update sysdba.JOINDATA
    set FROMTABLE = @newTableName  
    where FROMTABLE = @myTable    
    
update sysdba.JOINDATA
    set TOTABLE = @newTableName  
    where TOTABLE = @myTable

 

Collation Informationen feststellen…

--Collation der DB/DBs feststellen:
Select name, compatibility_level, collation_name 
from sys.databases db 
--where db.database_id = DB_ID()


--Collation aller Spalten feststellen (Nur für: char, varchar, ... Nicht für: int, long, datetime, ...)
SELECT TABLE_NAME, COLUMN_NAME, COLLATION_NAME , DATA_TYPE, *
FROM INFORMATION_SCHEMA.COLUMNS 
where COLLATION_NAME is NOT NULL
order by TABLE_NAME asc, ORDINAL_POSITION asc
--3440 Sätze (hier noch die Systemtabellen und u.a.)

Select o.name, c.name, c.collation_name, t.name
from sys.all_objects  o
	INNER JOIN sys.columns c ON o.object_id = c.object_id
	inner join sys.types t ON t.user_type_id = c.user_type_id  
where type = 'U'
	and c.COLLATION_NAME is NOT NULL
order by o.name asc, c.column_id asc
--2770