Click here to Skip to main content
15,896,328 members
Articles / Database Development / SQL Server / SQL Server 2008

Library for scripting SQL Server database objects with examples

Rate me:
Please Sign up or sign in to vote.
4.93/5 (138 votes)
8 Nov 2011CPOL13 min read 234.2K   13.3K   252  
This article is about library for scripting SQL Server database objects and examples representing how this library can be used.
SELECT
	ISNULL(s1tt.name, N'') AS [Owner],
	CAST(case when tt.principal_id is null then 1 else 0 end AS bit) AS [IsSchemaOwned],
	tt.name AS [Name],
	tt.type_table_object_id AS [ObjectId],
	SCHEMA_NAME(tt.schema_id) AS [Schema],
	CAST(case when tt.is_user_defined = 1 then 1 else 0 end AS bit) AS [IsUserDefined],
	[Description] = ISNULL((select value from fn_listextendedproperty ('MS_Description', 'SCHEMA', stt.name, 'TYPE', tt.name, null, null)),N'')
FROM
sys.table_types AS tt
LEFT OUTER JOIN sys.database_principals AS s1tt ON s1tt.principal_id = ISNULL(tt.principal_id, (TYPEPROPERTY(QUOTENAME(SCHEMA_NAME(tt.schema_id)) + '.' + QUOTENAME(tt.name), 'OwnerId')))
INNER JOIN sys.schemas AS stt ON stt.schema_id = tt.schema_id
LEFT OUTER JOIN sys.objects AS obj ON obj.object_id = tt.type_table_object_id;

SELECT
	[ObjectId]=clmns.object_id,
	[Name]=clmns.name,
	[ColumnId] = clmns.column_id,
	[IsNullable]=clmns.is_nullable,
	[IsComputed]=clmns.is_computed,
	[IsInPrimaryKey]=CAST(ISNULL(cik.index_column_id, 0) AS bit),
	[AnsiPaddingStatus]=clmns.is_ansi_padded,
	[IsRowGuidCol]=CAST(clmns.is_rowguidcol AS bit),
	[IsFullTextIndexed]=CAST(COLUMNPROPERTY(clmns.object_id, clmns.name, N'IsFulltextIndexed') AS bit),
	[IsDeterministic]=CAST(ISNULL(COLUMNPROPERTY(clmns.object_id, clmns.name, N'IsDeterministic'),0) AS bit),
	[IsPrecise]=CAST(ISNULL(COLUMNPROPERTY(clmns.object_id, clmns.name, N'IsPrecise'),0) AS bit),
	[IsPersisted]=CAST(ISNULL(cc.is_persisted, 0) AS bit),
	[Collation]=ISNULL(clmns.collation_name, N''),
	[IsForeignKey]=CAST(ISNULL((select TOP 1 1 from sys.foreign_key_columns AS colfk where colfk.parent_column_id = clmns.column_id and colfk.parent_object_id = clmns.object_id), 0) AS bit),
	[Identity]=clmns.is_identity,
	[IdentitySeed]=CAST(ISNULL(ic.seed_value,0) AS bigint),
	[IdentityIncrement]=CAST(ISNULL(ic.increment_value,0) AS bigint),
	[Default]=(case when clmns.default_object_id = 0 then N'' when d.parent_object_id > 0 then N'' else d.name end),
	[DefaultSchema]=(case when clmns.default_object_id = 0 then N'' when d.parent_object_id > 0 then N'' else schema_name(d.schema_id) end),
	[Rule]=(case when clmns.rule_object_id = 0 then N'' else r.name end),
	[RuleSchema]=(case when clmns.rule_object_id = 0 then N'' else schema_name(r.schema_id) end),
	--CAST(clmns.is_filestream AS bit) AS [IsFileStream],
	--CAST(clmns.is_sparse AS bit) AS [IsSparse],
	[IsColumnSet]=CAST(clmns.is_column_set AS bit),
	[DataType]=usrt.name,
	[DataTypeId] = usrt.user_type_id,
	[DataTypeSchema]= sclmns.name ,
	[SystemType]=ISNULL(baset.name, N'') ,
	[Length]=CAST(CASE WHEN baset.name IN (N'nchar', N'nvarchar') AND clmns.max_length <> -1 THEN clmns.max_length/2 ELSE clmns.max_length END AS int),
	[Precision]=CAST(clmns.precision AS int),
	[Scale]=CAST(clmns.scale AS int),
	[XmlSchemaNamespace]=ISNULL(xscclmns.name, N''),
	[XmlSchemaNamespaceSchema]=ISNULL(s2clmns.name, N''),
	[XmlDocumentConstraint]=ISNULL( (case clmns.is_xml_document when 1 then 2 else 1 end), 0),
	[UserType]=CASE WHEN usrt.is_table_type = 1 THEN N'structured' ELSE N'' END,
	[Definition] = isnull(cc.definition,'' ),
	[DefaultValue] = ISNULL(dc.definition,''),
	[Description] = ISNULL((select value from fn_listextendedproperty ('MS_Description', 'SCHEMA', stt.name, 'TYPE', tt.name, 'COLUMN', clmns.name)),N'')
FROM
sys.table_types AS tt
INNER JOIN sys.schemas AS stt ON stt.schema_id = tt.schema_id
INNER JOIN sys.all_columns AS clmns ON clmns.object_id=tt.type_table_object_id
LEFT OUTER JOIN sys.indexes AS ik ON ik.object_id = clmns.object_id and 1=ik.is_primary_key
LEFT OUTER JOIN sys.index_columns AS cik ON cik.index_id = ik.index_id and cik.column_id = clmns.column_id and cik.object_id = clmns.object_id and 0 = cik.is_included_column
LEFT OUTER JOIN sys.identity_columns AS ic ON ic.object_id = clmns.object_id and ic.column_id = clmns.column_id
LEFT OUTER JOIN sys.computed_columns AS cc ON cc.object_id = clmns.object_id and cc.column_id = clmns.column_id
LEFT OUTER JOIN sys.objects AS d ON d.object_id = clmns.default_object_id
LEFT OUTER JOIN sys.objects AS r ON r.object_id = clmns.rule_object_id
LEFT OUTER JOIN sys.types AS usrt ON usrt.user_type_id = clmns.user_type_id
LEFT OUTER JOIN sys.schemas AS sclmns ON sclmns.schema_id = usrt.schema_id
LEFT OUTER JOIN sys.types AS baset ON (baset.user_type_id = clmns.system_type_id and baset.user_type_id = baset.system_type_id) or ((baset.system_type_id = clmns.system_type_id) and (baset.user_type_id = clmns.user_type_id) and (baset.is_user_defined = 0) and (baset.is_assembly_type = 1)) 
LEFT OUTER JOIN sys.xml_schema_collections AS xscclmns ON xscclmns.xml_collection_id = clmns.xml_collection_id
LEFT OUTER JOIN sys.schemas AS s2clmns ON s2clmns.schema_id = xscclmns.schema_id 
LEFT OUTER JOIN sys.default_constraints dc on clmns.default_object_id = dc.object_id
order by objectid,clmns.column_id

select 
	[ObjectId]=idx.object_id,
	[Name] = idx.name,
	[IndexId] = idx.index_id,
	[TypeDescription]=idx.type_desc,
	[IsUnique]=idx.is_unique,
	[IgnoreDupKey]=idx.ignore_dup_key,
	[IsPrimaryKey]=idx.is_primary_key,
	[IsUnique]=idx.is_unique_constraint,
	[FilterDefinition]=idx.filter_definition
from sys.indexes idx 
join sys.table_types tt on tt.type_table_object_id = idx.object_id 
where idx.index_id<>0;

select 
	c.name,
	[IndexName]=idx.name,
	[ObjectId]=idx.object_id,
	[TableTypeName]=tt.NAME,
	[IsDescendingKey]=ic.is_descending_key,
	[IndexId]=idx.index_id
from sys.indexes idx 
join sys.table_types tt on tt.type_table_object_id = idx.object_id 
join sys.index_columns ic on ic.index_id=idx.index_id and ic.object_id=idx.object_id
join sys.columns c on c.object_id = idx.object_id
where idx.index_id<>0 and c.column_id=ic.index_column_id;

select
	cc.name,
	[ParentObjectId]=cc.parent_object_id,
	[ObjectId]=cc.object_id,
	cc.definition
from sys.check_constraints cc

join sys.table_types tt on tt.type_table_object_id = cc.parent_object_id;




/*
SELECT
	ISNULL(s1tt.name, N'') AS [Owner],
	CAST(case when tt.principal_id is null then 1 else 0 end AS bit) AS [IsSchemaOwned],
	tt.name AS [Name],
	tt.type_table_object_id AS [ID],
	SCHEMA_NAME(tt.schema_id) AS [Schema],
	CAST(case when tt.is_user_defined = 1 then 1 else 0 end AS bit) AS [IsUserDefined]
FROM
sys.table_types AS tt
LEFT OUTER JOIN sys.database_principals AS s1tt ON s1tt.principal_id = ISNULL(tt.principal_id, (TYPEPROPERTY(QUOTENAME(SCHEMA_NAME(tt.schema_id)) + '.' + QUOTENAME(tt.name), 'OwnerId')))
INNER JOIN sys.schemas AS stt ON stt.schema_id = tt.schema_id
LEFT OUTER JOIN sys.objects AS obj ON obj.object_id = tt.type_table_object_id;

SELECT
	clmns.object_id,
	clmns.name AS [Name],
	clmns.column_id AS [ID],
	clmns.is_nullable AS [Nullable],
	clmns.is_computed AS [Computed],
	CAST(ISNULL(cik.index_column_id, 0) AS bit) AS [InPrimaryKey],
	clmns.is_ansi_padded AS [AnsiPaddingStatus],
	CAST(clmns.is_rowguidcol AS bit) AS [RowGuidCol],
	CAST(COLUMNPROPERTY(clmns.object_id, clmns.name, N'IsFulltextIndexed') AS bit) AS [IsFullTextIndexed],
	CAST(ISNULL(COLUMNPROPERTY(clmns.object_id, clmns.name, N'IsDeterministic'),0) AS bit) AS [IsDeterministic],
	CAST(ISNULL(COLUMNPROPERTY(clmns.object_id, clmns.name, N'IsPrecise'),0) AS bit) AS [IsPrecise],
	CAST(ISNULL(cc.is_persisted, 0) AS bit) AS [IsPersisted],
	ISNULL(clmns.collation_name, N'') AS [Collation],
	CAST(ISNULL((select TOP 1 1 from sys.foreign_key_columns AS colfk where colfk.parent_column_id = clmns.column_id and colfk.parent_object_id = clmns.object_id), 0) AS bit) AS [IsForeignKey],
	clmns.is_identity AS [Identity],
	CAST(ISNULL(ic.seed_value,0) AS bigint) AS [IdentitySeed],
	CAST(ISNULL(ic.increment_value,0) AS bigint) AS [IdentityIncrement],
	(case when clmns.default_object_id = 0 then N'' when d.parent_object_id > 0 then N'' else d.name end) AS [Default],
	(case when clmns.default_object_id = 0 then N'' when d.parent_object_id > 0 then N'' else schema_name(d.schema_id) end) AS [DefaultSchema],
	(case when clmns.rule_object_id = 0 then N'' else r.name end) AS [Rule],
	(case when clmns.rule_object_id = 0 then N'' else schema_name(r.schema_id) end) AS [RuleSchema],
	CAST(clmns.is_filestream AS bit) AS [IsFileStream],
	CAST(clmns.is_sparse AS bit) AS [IsSparse],
	CAST(clmns.is_column_set AS bit) AS [IsColumnSet],
	usrt.name AS [DataType],
	sclmns.name AS [DataTypeSchema],
	ISNULL(baset.name, N'') AS [SystemType],
	CAST(CASE WHEN baset.name IN (N'nchar', N'nvarchar') AND clmns.max_length <> -1 THEN clmns.max_length/2 ELSE clmns.max_length END AS int) AS [Length],
	CAST(clmns.precision AS int) AS [NumericPrecision],
	CAST(clmns.scale AS int) AS [NumericScale],
	ISNULL(xscclmns.name, N'') AS [XmlSchemaNamespace],
	ISNULL(s2clmns.name, N'') AS [XmlSchemaNamespaceSchema],
	ISNULL( (case clmns.is_xml_document when 1 then 2 else 1 end), 0) AS [XmlDocumentConstraint],
	CASE WHEN usrt.is_table_type = 1 THEN N'structured' ELSE N'' END AS [UserType],
	isnull(cc.definition,'' ) AS Definition
FROM
sys.table_types AS tt
INNER JOIN sys.schemas AS stt ON stt.schema_id = tt.schema_id
INNER JOIN sys.all_columns AS clmns ON clmns.object_id=tt.type_table_object_id
LEFT OUTER JOIN sys.indexes AS ik ON ik.object_id = clmns.object_id and 1=ik.is_primary_key
LEFT OUTER JOIN sys.index_columns AS cik ON cik.index_id = ik.index_id and cik.column_id = clmns.column_id and cik.object_id = clmns.object_id and 0 = cik.is_included_column
LEFT OUTER JOIN sys.identity_columns AS ic ON ic.object_id = clmns.object_id and ic.column_id = clmns.column_id
LEFT OUTER JOIN sys.computed_columns AS cc ON cc.object_id = clmns.object_id and cc.column_id = clmns.column_id
LEFT OUTER JOIN sys.objects AS d ON d.object_id = clmns.default_object_id
LEFT OUTER JOIN sys.objects AS r ON r.object_id = clmns.rule_object_id
LEFT OUTER JOIN sys.types AS usrt ON usrt.user_type_id = clmns.user_type_id
LEFT OUTER JOIN sys.schemas AS sclmns ON sclmns.schema_id = usrt.schema_id
LEFT OUTER JOIN sys.types AS baset ON (baset.user_type_id = clmns.system_type_id and baset.user_type_id = baset.system_type_id) or ((baset.system_type_id = clmns.system_type_id) and (baset.user_type_id = clmns.user_type_id) and (baset.is_user_defined = 0) and (baset.is_assembly_type = 1)) 
LEFT OUTER JOIN sys.xml_schema_collections AS xscclmns ON xscclmns.xml_collection_id = clmns.xml_collection_id
LEFT OUTER JOIN sys.schemas AS s2clmns ON s2clmns.schema_id = xscclmns.schema_id order by object_id,ID;

select 
	idx.object_id,
	idx.name,
	idx.index_id,
	idx.type_desc,
	idx.is_unique,
	idx.ignore_dup_key,
	idx.is_primary_key,
	idx.is_unique_constraint,
	idx.filter_definition
from sys.indexes idx 
join sys.table_types tt on tt.type_table_object_id = idx.object_id 
where idx.index_id<>0;

select 
	c.name,
	idx.name,
	idx.object_id,
	tt.name,
	ic.is_descending_key,
	idx.index_id
from sys.indexes idx 
join sys.table_types tt on tt.type_table_object_id = idx.object_id 
join sys.index_columns ic on ic.index_id=idx.index_id and ic.object_id=idx.object_id
join sys.columns c on c.object_id = idx.object_id
where idx.index_id<>0 and c.column_id=ic.index_column_id;

select
	dc.name,
	dc.parent_object_id,
	dc.object_id,
	dc.definition
from sys.default_constraints dc 

join sys.table_types tt on tt.type_table_object_id = dc.parent_object_id;

select
	cc.name,
	cc.parent_object_id,
	cc.object_id,
	cc.definition
from sys.check_constraints cc

join sys.table_types tt on tt.type_table_object_id = cc.parent_object_id;

*/

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect Marwin Cassovia Soft
Slovakia Slovakia
My name is Robert Kanasz and I have been working with ASP.NET, WinForms and C# for several years.
MCSD - Web Applications
MCSE - Data Platform
MCPD - ASP.NET Developer 3.5
- Web Developer 4
MCITP - Database Administrator 2008
- Database Developer 2008
MCSA - SQL Server 2012
MCTS - .NET Framework 3.5, ASP.NET Applications
- SQL Server 2008, Database Development
- SQL Server 2008, Implementation and Maintenance
- .NET Framework 4, Data Access
- .NET Framework 4, Service Communication Applications
- .NET Framework 4, Web Applications
MS - Programming in HTML5 with JavaScript and CSS3 Specialist

Open source projects: DBScripter - Library for scripting SQL Server database objects


Please, do not forget vote

Comments and Discussions