SQL SERVER – How to work with Row Constructors , inserted and deleted tables and Handle Result Set

There are many ways to track changes made to the table in SQL Server one of the method is to use inserted and deleted tables and get the result set and use in code appropriately.

Step 1: Creating Table

create table Emp

(

empId int primary key identity,

class int,

empName varchar(30),

sal money,

empState varchar(25)

)

Step 2: Inserting values into the table

use row constructors or insert one by one

insert into Emp values

(2,’Dilip’,3000,’AP’),

(2,’Rahul’,5000,’DH’),

(3,’Mohan’,7000,’KR’),

(2,’Dilip’,3000,’AP’),

(2,’Rahul’,5000,’DH’),

(3,’Mohan’,7000,’KR’),

(4,’Dilip’,3000,’AP’),

(5,’Rahul’,5000,’DH’),

(6,’Mohan’,7000,’KR’),

(5,’Dilip’,3000,’AP’),

(6,’Rahul’,5000,’DH’)

Then,

Output clause

/* Local System*/

Updating

update Emp Set sal = sal +1

output inserted.empId,deleted.sal as [old sal], inserted.sal as [new sal]

where class =2

/* table Variable for server side maintenance*/

declare @change table

(

id int not null,

[old sal] money,

[new sal] money

)

update Emp Set sal = sal +1

output inserted.empId,deleted.sal as [old sal], inserted.sal as [new sal] into @change

where class =2

select * from @change

Deleting

delete Emp

output deleted.*

where empId=3 or empId = 6

Inserting

insert into Emp

output inserted.*

values

(13,’Dilip’,332.93,’JK’),

(14,’rakesh’,312.93,’GJ’)

For Updating,deleting and inserting we get a result set.

Update 21 Jan 2013

One of my reader Mini asked me that she is trying to insert multiple values into table using row constructor but it is giving error in the comma in the syntax ?

Ans:

1)  Result set are not supported in sql server expressed Edition

2) Inserting multiple rows or technically can be called as Row Constructors are new feature added in SQL Server 2008

if we try to execute the above code on SQL Server 2005 we will get an error at comma stating that it is not allowed, because this syntax is introduced in SQL Server 2008 and even when we are working on client server environment no matter what SQL Server you have if the server to whom you are connecting is previous versions of SQL Server 2008 it will not execute, so these things should kept into consideration.

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com)

Advertisements

SQL SERVER – CREATE INDEX myIndex ON myTable(myColumn)What type of Index will get created after executing the above statement

Non-clustered index. Important thing to note: By default a clustered index gets created on the primary key, unless specified otherwise.

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com )

SQL SERVER – What is @@Rowcount, @@Error and @@Identity

@@Rowcount is used to display the number of rows affected by last SQL statement.

@@Error displays the error number for the last SQL statement executed. The value is zero,if there is no error.

@@identity returns the last inserted identity value.

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com )

SQL SERVER 2008 – How to rename a column

There are many ways where in we can  rename  a column but what I prefer is using predefined stored Procedure sp_rename .

Syntax :

exec sp_rename ‘tablename.ColumnName’, ‘NewColumnName’, ‘column’ –objecttype

EX: changing the column name “Name” to “FirstName”

create table Personal(ID int, Name varchar(50))

EXEC sp_rename ‘Personal.Name’, ‘FirstName’, ‘column’

Output:

The message displayed is a caution message that says when we alter the column name there is a possibility that it can be used in one or more stored procedures so make sure you update everything and then only change the name .

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com )

SQL SERVER – What is the difference between group by and order by

Group by controls the presentation of the rows, order by controls the presentation of the columns  for the results of the SELECT statement.

EX 1 : Group By helps us display any aggregate of any column based on a field what has repeated names.

use AdventureWorksDW2008R2

go

select Title,SUM(BaseRate) as Rate  from dbo.DimEmployee group by Title

Output:

EX 2 : Order By clause helps us display any table based on the values present on that particular column.

use AdventureWorksDW2008R2

go

select FirstName,Title  from dbo.DimEmployee order by FirstName

the difference is how we choose and what is the reuirement.

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com )

SQL SERVER – What is the difference of a LEFT JOIN and an INNER JOIN statement

A LEFT JOIN will take ALL values from the first declared table and matching values from the second declared table based on the column the join has been declared on. An INNER JOIN will take only matching values from both tables

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com )

SQL SEREVER – What is a View and An Indexed View

 A view  is a virtual tables that is made up of one or more tables. It can be used for security purpose, hiding complex queries.

An Indexed view is a view that has unique clustered index created on it. This takes physical storage i.e it stores data. It will be used in OLAP, decision support where inserts/updates are low. It can be used in the following scenarios

1) Joins and aggregation of big tables.

2) Repeated joins of the same tables on the same keys.

Reference : Dilip Kumar Jena ( https://sqlexplore.wordpress.com )