Home | About Nakul Vachhrajani | Archives
March 6, 2017 9:00 AM
A few weeks ago, I ran into a question on one of the forums asking for a script that can help the team validate object naming conventions. Immediately, I was able to sympathize with the team.
What happens is that when developers use the graphical (GUI) tools in the SQL Server Management Studio (SSMS) or via a simple script, they often fail to specify a name to each individual constraint. These slips are not intentional – developers don’t often realize that each constraint is an independent object because they are ultimately related to another user defined object (a table).
However, when a name is not explicitly specified for a particular constraint, what Microsoft SQL Server does is provide a name by combining the following:
While this format will always generate a unique value, it would generate names that may not be intuitive. It is therefore a common practice to review the database code and review for compliance with naming conventions that have been defined in the product/project.
This logic can be leveraged during code reviews/audits to identify objects where standard project naming conventions are not met.
To demonstrate the functionality of the script, I create one table with a wide range of constraints – none of which have a name specified.
USE [tempdb];
GO
IF OBJECT_ID('dbo.ConstraintsWithoutNames','U') IS NOT NULL
BEGIN
DROP TABLE dbo.ConstraintsWithoutNames;
END
GO
CREATE TABLE dbo.ConstraintsWithoutNames
([RecordId] INT NOT NULL IDENTITY(1,1)
PRIMARY KEY CLUSTERED,
[RecordName] VARCHAR(255) NULL,
[RecordStatus] TINYINT NOT NULL DEFAULT (0)
CHECK ([RecordStatus] IN (0, 2, 4, 8))
);
GO
Now, the following script is a simple string search that looks for strings ending with the hexa-decimal representation of the parent object.
USE [tempdb];
GO
SELECT *
FROM [sys].[objects] AS [so]
WHERE [so].[is_ms_shipped] = 0 --Considering user objects only
AND [so].[name] LIKE ('%' + REPLACE(CONVERT(NVARCHAR(255),CAST([so].[object_id] AS VARBINARY(MAX)),1),'0x',''))
--Only those objects whose names end with the hexadecimal
--representation of their object Id

Objects given default constraint names
I hope you found this script useful. Please do share your ideas/scripts that you may be using in your day-to-day activities.
Until we meet next time,
Be courteous. Drive responsibly.
Posted by nakulvachhrajani
Categories: #SQLServer
Tags: #SQLServer, #TSQL, Administration, Best Practices, DBA, Development, HowTo, Tips
Mobile Site | Full Site
Get a free blog at WordPress.com Theme: WordPress Mobile Edition by Alex King.