Click here to Skip to main content
15,886,362 members
Articles / Programming Languages / SQL
Tip/Trick

How to use Update query with table variables

Rate me:
Please Sign up or sign in to vote.
4.80/5 (5 votes)
27 Apr 2012CPOL 51.7K   1
Things to remember while using Update query with Table variable

Yesterday I come across a strange issue while I was trying to use update query with table variable. The query which works fine with temporary table does not work with table variables.

Let us confirm this with following example:

First create 2 temporary variables. Use following queries for this:

SQL
CREATE TABLE #ProjectTbl (ProjectId INT, ProjectName VARCHAR(50), PartnerId INT, PartnerName VARCHAR(50))

INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (1, 'Project 1', 1)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (2, 'Project 2', 1)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (3, 'Project 3', 1)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (4, 'Project 4', 2)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (5, 'Project 5', 2)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (6, 'Project 6', 2)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (7, 'Project 3', 3)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (8, 'Project 4', 3)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (9, 'Project 5', 3)
INSERT INTO #ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (10, 'Project 6', 3)

CREATE TABLE #PartnerTbl (PartnerId INT, PartnerName VARCHAR(50))

INSERT INTO #PartnerTbl (PartnerId, PartnerName) VALUES (1, 'Partner 1')
INSERT INTO #PartnerTbl (PartnerId, PartnerName) VALUES (2, 'Partner 2')
INSERT INTO #PartnerTbl (PartnerId, PartnerName) VALUES (3, 'Partner 3'

Now try to update the table 1 with a value from table 2 using following query. 

SQL
UPDATE
      #ProjectTbl
SET
      #ProjectTbl.PartnerName = #PartnerTbl.PartnerName
FROM
      #PartnerTbl
WHERE
      #ProjectTbl.PartnerId = #PartnerTbl.PartnerId  

It works fine, but when I tried to use the same query with table variables it did not work. Lets see, 

Create 2 table variables and insert some data in the. Use following queries for this: 

SQL
DECLARE @ProjectTbl TABLE (ProjectId INT, ProjectName VARCHAR(50), PartnerId INT, PartnerName VARCHAR(50)) 

INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (1, 'Project 1', 1)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (2, 'Project 2', 1)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (3, 'Project 3', 1)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (4, 'Project 4', 2)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (5, 'Project 5', 2)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (6, 'Project 6', 2)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (7, 'Project 3', 3)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (8, 'Project 4', 3)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (9, 'Project 5', 3)
INSERT INTO @ProjectTbl (ProjectId, ProjectName, PartnerId) VALUES (10, 'Project 6', 3)

DECLARE @PartnerTbl TABLE (PartnerId INT, PartnerName VARCHAR(50))

INSERT INTO @PartnerTbl (PartnerId, PartnerName) VALUES (1, 'Partner 1')
INSERT INTO @PartnerTbl (PartnerId, PartnerName) VALUES (2, 'Partner 2')
INSERT INTO @PartnerTbl (PartnerId, PartnerName) VALUES (3, 'Partner 3')  

Now try to update the table 1 with a value from table 2 using following query.

SQL
UPDATE
      @ProjectTbl
SET
      @ProjectTbl.PartnerName = @PartnerTbl.PartnerName
FROM
      @PartnerTbl
WHERE
      @ProjectTbl.PartnerId = @PartnerTbl.PartnerId  

Above queries works fine with temporary tables, but here it gives error. So while working with table variables use following queries in place of above ones. 

SQL
UPDATE
      PRJ
SET
      PRJ.PartnerName = PAR.PartnerName
FROM
      @ProjectTbl PRJ, @PartnerTbl PAR
WHERE
      PRJ.PartnerId = PAR.PartnerId 

OR

SQL
UPDATE
      PRJ
SET
      PRJ.PartnerName = (SELECT PAR.PartnerName FROM @PartnerTbl PAR WHERE PRJ.PartnerId = PAR.PartnerId)
FROM
      @ProjectTbl PRJ  

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 4 Pin
Umesh AP7-Oct-16 2:34
Umesh AP7-Oct-16 2:34 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.