Convert Month Number to Month Name in SQL Server

One of my colleague asked me a simplest way to convert Month Number to Month Name. Here’s the simplest way in my opinion :

DECLARE @MonthNo smallint
SET @MonthNo = 11
SELECT DateName(mm,DATEADD(mm,@MonthNo ,-1)) as [MonthName]

There are alternate ways also to achieve this.Share your ideas.

Reference: Narendra Singh (http://blog.sikarnarender.com)

How to get difference in year month and days from 2 date values ?

Following query will give result as (X Years X Months X Days) :

Declare @DOB DateTime
DECLARE @yy INT
DECLARE @mm INT
DECLARE @dd INT

SET @DOB=’2011-10-11 00:00:00.000′
SET @yy = DATEDIFF(mm, @DOB, GETDATE())/12
SET @mm = DATEDIFF(mm, @DOB, GETDATE())%12 – 1
SET @dd = ABS(DATEDIFF(dd, DATEADD(mm,@mm , DATEADD(yy, @yy, @DOB)), GETDATE()))
SELECT Convert(varchar(10),@yy) + ‘ Years ‘ + Convert(varchar(10),@mm) + ‘ Months ‘ + Convert(varchar(10),@dd) + ‘ Days ‘

There are alternate ways also to achieve this.Share your ideas.

Reference: Narendra Singh (http://blog.sikarnarender.com)

How to enable remote connection on Sql Server 2008

To enable remote connections on the instance of SQL Server 2008, use the SQL Server Configuration Manager under configuration Tools. Go to Start > All Programs > Microsoft Sql Server 2008 > Configuration Tools > Sql Server Configuration Manager.

  • Start Sql Server Browser service, if it is not started. You can set its start mode Automatic using Right click on Sql Server Browser > Properties > Services > Start Mode.
  • Under Sql Server Network Configuration, select your Sql Server Instance and enable the TCP/IP protocol.

For Step-by-Step information with screen shots follow the below links:
1. http://mushtaqnaik.blogspot.in/2010/12/how-to-enable-remote-connection-on-sql.html
2. http://blogs.msdn.com/b/walzenbach/archive/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008.aspx

Suggested links:
Enable Remote Connection on Sql Server 2005

Enable Remote Connection on Sql Server 2005

To enable remote connections on the instance of SQL Server 2005,use the SQL Server 2005 Surface Area Configuration tool. The Surface Area Configuration tool is installed when you install SQL Server 2005.You must enable remote connections for each instance of SQL Server 2005 that you want to connect to from a remote computer. To do this, follow these steps:

  • Click Start, point to Programs, point to Microsoft SQL Server 2005, point to Configuration Tools, and then click SQL Server Surface Area Configuration.
  • On the SQL Server 2005 Surface Area Configuration page, click Surface Area Configuration for Services and Connections.
  • On the Surface Area Configuration for Services and Connections page, expand Database Engine, click Remote Connections, click Local and remote connections, click the appropriate protocol to enable for your environment, and then click Apply.
    Note : Click OK when you receive the following message:
    Changes to Connection Settings will not take effect until you restart the Database Engine service.
  • On the Surface Area Configuration for Services and Connections page, expand Database Engine, click Service, click Stop, wait until the MSSQLSERVER service stops, and then click Start to restart the MSSQLSERVER service.

Suggested links:
How to enable remote connection on Sql Server 2008

Normalization in Sql

Normalization is the process of efficiently organizing data in a database. There are two goals of the normalization process: eliminating redundant data (for example, storing the same data in more than one table) and ensuring data dependencies make sense (only storing related data in a table). Both of these are worthy goals as they reduce the amount of space a database consumes and ensure that data is logically stored. There are several benefits for using Normalization in Database.
Benefits

  • Eliminate data redundancy
  • Improve performance
  • Query optimization
  • Faster update due to less number of columns in one table
  • Index improvement

The Normal Forms

The database community has developed a series of guidelines for ensuring that databases are normalized. These are referred to as normal forms and are numbered from one (the lowest form of normalization, referred to as first normal form or 1NF) through five (fifth normal form or 5NF). In practical applications, you’ll often see 1NF, 2NF, and 3NF along with the occasional 4NF. Fifth normal form is very rarely seen and won’t be discussed in this article.

First Normal Form (1NF)

First normal form (1NF) sets the very basic rules for an organized database:

  • Eliminate duplicative columns from the same table
  • Create separate tables for each group of related data and identify each row with a unique column or set of columns (the primary key).

First Normal Form
Figure 1: First Normal Form(1NF)

Second Normal Form (2NF)

Second normal form (2NF) further addresses the concept of removing duplicative data:

  • Meet all the requirements of the first normal form.
  • Remove subsets of data that apply to multiple rows of a table and place them in separate tables.
  • Create relationships between these new tables and their predecessors through the use of foreign keys.

Second Normal Form
Figure 2: Second Normal Form(2NF)

Third Normal Form (3NF)

Third normal form (3NF) goes one large step further:

  • Meet all the requirements of the second normal form.
  • Remove columns that are not dependent upon the primary key.

Fourth Normal Form (4NF)

Fourth normal form (4NF) has one additional requirement:

  • Meet all the requirements of the third normal form.
  • A relation is in 4NF if it has no multi-valued dependencies. i.e. If PK is composed of multiple columns then all non-key attributes should be derived from FULL PK only. If some non-key attribute can be derived from partial PK then remove it.

The 4NF also known as BCNF NF.

Fourth Normal Form
Figure 3: Fourth Normal Form(4NF)

Summary

Your data model design is both an art and a science. Balance what works best to support the application that will use the database and to store data in an efficient and structured manner. For transaction-based systems, a highly normalized database design is the way to go; it ensures consistent data throughout the entire database and that it is performing well. For reporting-based systems, a less normalized database is usually the best approach. You will eliminate the need to join a lot of tables and queries will be faster. Plus, the database will be much more user friendly for ad hoc reporting needs.

ACID (Atomicity, Consistency, Integrity, Durability) in SQL Server

ACID (an acronym for Atomicity Consistency Isolation Durability) is a concept that every database management system must strive to achieve. For a reliable database all these four attributes should be achieved.

Atomicity: stats that database modifications must follow an “all or nothing” rule. Each transaction is said to be “atomic”. If one part of the transaction fails, the entire transaction fails.

Consistency: stats that a transaction either creates a new and valid state of data, or, if any failure occurs, returns all data to its previous state. It means a transaction will never leave your database in a half finished state.

Integrity: keeps transaction separated each other until they are finished. A transaction in process and yet not committed must remain isolated from any other transaction.

Durability: ensures that any transaction committed to the database will not be lost. Committed data are saved by the system in such a way that, even in the event of failure or system restart, the data is available in its correct state.

Table Variables in Sql Server 2005

 

Table variable is almost similar to the temporary table in sql server 2005. Table variables are replacement to temporary tables. The following syntax shows how to define a table variable.

 
Declare @Customer table ( CustomerID int identity(1,1), CustomerName varchar(100), CompanyName varchar(100), Address varchar(250) )
 

You can notice the syntax to define a table variable is similar to the syntax to normal table definition. declare keyword is used in place of create keyword. And table name is prefixed with ‘@’ as all tsql variables do.

 

1.Table variables are stored in memory rather than in database.

 

2.Querying table variables is very fast as there are no disk reads needed.

 

3.The scope the table variables is same as other tsql variables. i.e, within statements batch or sproc

 

4.Table variables cannot be dropped as they are automatically disappeared when they reach out scope

 

5.As explained above all the data in table variables is stored in server’s memory. So if there is huge data then it is not recommended to use table variables to avoid memory overhead.

 

6.If the number of records is more than 100 then it is recommended to use temporary tables.To learn more about temporary tables please read this blog post : http://sikarnarender.blogspot.com/2011/11/how-to-create-temporary-table-in-sql.html

 

 

How to create temporary table in sql server 2005?

The syntax to create a temporary table is exactly same as the syntax to create a normal table. But the difference is the table name is prefixed with ‘#’ (pound). By looking at the prefix ‘#’ the sql server understands that it is a temporary table. The following code demonstrates how to create a temporary variable.

 
CREATE TABLE #Customer ( CustomerID int identity(1,1), CustomerName varchar(100), CompanyName varchar(100), Address varchar(250) )
 

1.It is almost similar to normal table with very few exceptions.

 

2.The scope of the temp table is the current connection session. It can be accessed from any where in same connection session.

 

3.This table is automatically dropped when the connection session is closed.

 

4.Different connection sessions creating temporary table with same name will create different copies of the temporary table with the same name. Actually internally the table name is appended with a unique number to support many connection sessions creating tables with same name. You can notice how the table name is uniquely maintained by sql server by running this query. select * from information_schema.tables where table_name like ‘%customer%’

 

5.foreign key relations cannot be applied to temp tables.

 

6.Optionally you may drop the table at the end of it’s use. It is a good practice to drop any temporary table after use. drop table #Customer

 

When you create a temporary table it will be created in tempdb. At the time of table creation the tempdb is locked and hence there is some overhead involved using this. If there are less than 100 records then using temporary tables is not recommended. In such cases you can use table variables which are stored in memory rather than in database(on disk). To learn more about table variables please read this : http://sikarnarender.blogspot.com/2011/11/table-variables-in-sql-server-2005.html

 

Saving changes after table edit in SQL Server Management Studio 2008

Question : If we want to save any changes in a table, previously saved in SQL Server Management Studio (no data in table present) we get an error message :

 

Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created.

 

What can prevent the table to be easily edited? Or, is it the usual way for SQL Server Management Studio to require re-creating table for editing? What is it – this “option Prevent saving changes”?

 

Answer : This problem occurs when “Prevent saving changes that require table re-creation” option is enabled.

 
Go into Tools -> Options -> Designers-> Uncheck “Prevent saving changes that require table re-creation”.
 

That happens because sometimes it is necessary to drop and recreate a table in order to change something. This can take a while, since all data must be copied to a temp table and then re-inserted in the new table. Since SQL Server by default doesn’t trust you, you need to say “OK, I know what I’m doing, now let me do my work.”