SQL Tidbits

creek (2)

Handy little bits.  Have long-since forgotten where I got these little gems from.

Find a constraint by name

Select SysObjects.[Name] As [Constraint Name] ,
 Tab.[Name] as [Table Name],
 Col.[Name] As [Column Name]
From SysObjects Inner Join 
(Select [Name],[ID] From SysObjects) As Tab
On Tab.[ID] = Sysobjects.[Parent_Obj] 
Inner Join sysconstraints On sysconstraints.Constid = Sysobjects.[ID] 
Inner Join SysColumns Col On Col.[ColID] = sysconstraints.[ColID] And Col.[ID] = Tab.[ID]
where sysobjects.name = 'constraint name'
order by [Tab].[Name]

Find foreign-key related tables

SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName,
SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
where OBJECT_NAME(f.referenced_object_id) = 'table name'
order by TableName, columnname


Shrink log files

Use master
declare @dbName varchar(100)
declare @recoveryModel varchar(100)
declare @sqlString varchar(100)
declare @dbId integer
declare @logFileName varchar(100)
declare dbcursor cursor for select name, recovery_model_desc from sys.databases where recovery_model_desc != 'SIMPLE'
open dbcursor
while 1=1
fetch from dbcursor into @dbName, @recoveryModel 
if @@FETCH_STATUS != 0 break 
print @recoveryModel + ' ' + @dbname + ' setting recovery model to SIMPLE.' 
SET @sqlString = 'ALTER DATABASE [' + @dbname + '] SET RECOVERY SIMPLE' 
EXECUTE (@sqlString) 
close dbcursor
deallocate dbcursor 

declare dbcursor2 cursor for 
select name, recovery_model_desc, database_id from sys.databases 
where recovery_model_desc = 'SIMPLE'
open dbcursor2
while 1=1
fetch from dbcursor2 into @dbName, @recoveryModel, @dbId 
if @@FETCH_STATUS != 0 break
 set @logFileName = (select name from sys.master_files where database_id = @dbId and type = 1) 
print 'Shrinking log file ' + @logFileName + ' for database ' + @dbName 
set @sqlString = 'USE ' + @dbName + '; ' + 'DBCC SHRINKFILE (' + @logFileName + ')' 
execute (@sqlString)
close dbcursor2
deallocate dbcursor2

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s