If you ever studied normalisation of databases, you have probably come to the same conclusion as I have regarding NULL: It is best if NULL values in the database can be avoided but it is not always easy to achieve a NULL-free database. Let’s look at an example:
Continue reading “What is NULL?”Archiving with the OUTPUT clause
Most database developers have been faced with the task to archive old data. It could look something like this:
CREATE TABLE dbo.Cars( CarID int identity(1,1) PRIMARY KEY, BrandName varchar(100), ModelName varchar(100), releaseYear smallint ); CREATE TABLE dbo.Cars_Archive( CarID int, BrandName varchar(100), ModelName varchar(100), releaseYear smallint, ArchivedDateTime datetime DEFAULT CURRENT_TIMESTAMP, CONSTRAINT PK_Cars_Archive PRIMARY KEY(CarID, ArchivedDateTime) )
And updating a row would often require a stored procedure and some explicit transactions
Continue reading “Archiving with the OUTPUT clause”Generate time slots
Here’s an Inline Table Valued Function (TVF) for generating time-slots from a start-date to an end-date, given a certain time for each slot, given in minutes.
This would be useful for many applications, like scheduling systems, sales statistics broken down into certain slices of time etc. The function does have some limitations, eg there can’t be more than 100.000 minutes between start and endtime. This is easily fixed by just adding Another CROSS JOIN to CTE2, or by changing the DATEADD-functions to use hour instead of minute if that fits your purpose.
Continue reading “Generate time slots”