Groups | Blog | Home
all groups > sql server programming > january 2004 >

sql server programming : set tab2 col1 to tab1 col1



Petrina Lessard
1/3/2004 11:36:14 PM
Hi!

I have two tables. I want to update the data in one table
to be the same as the same col in the other table.

ex:

tab1 tabl2

col1 col1
col2 col2
col3 col3

I want tab2 col1 set to be the same as tab1 col1.

How can I do this?

Thanks,
Petrina Lessard
1/4/2004 1:47:03 AM
Hi Hari,

I don't need to insert the records from tab1.

I need to update the tab2.col1 data with the data from
tab1.col1 where tab2.col2 is equal to tab1.col2

Thanks,
Petrina


[quoted text, click to view]
Petrina Lessard
1/4/2004 5:39:00 AM
Great thanks!

If col2 is not unique on it's own, how can I set and
update col1 based on two columns in the other table, say
col2 and col3 which are?

Petrina

[quoted text, click to view]
David Portas
1/4/2004 9:59:59 AM
Assuming col2 is unique in Tab1, this will update all rows in Tab2, setting
col1 to NULL if there is no matching row in Tab1:

UPDATE Tab2
SET col1 =
(SELECT col1
FROM Tab1
WHERE col2 = Tab2.col2)

Or, this will only update col1 for rows that exist in both tables:

UPDATE Tab2
SET col1 =
(SELECT col1
FROM Tab1
WHERE col2 = Tab2.col2)
WHERE EXISTS
(SELECT *
FROM Tab1
WHERE col2 = Tab2.col2)

--
David Portas
------------
Please reply only to the newsgroup
--

Uri Dimant
1/4/2004 11:50:10 AM
Hari
I think the poster wanted to update table .

update tab1 set col1=t.col1 from tab2 t join tab1 on tab1.PK=t.PK





[quoted text, click to view]

David Portas
1/4/2004 2:31:11 PM
UPDATE Tab2
SET col1 =
(SELECT col1
FROM Tab1
WHERE col2 = Tab2.col2 AND col3 = Tab3.col3)
WHERE EXISTS
(SELECT *
FROM Tab1
WHERE col2 = Tab2.col2 AND col3 = Tab3.col3)

The WHERE EXISTS part is optional depending on whether or not you want to
set to NULL any rows in Tab2 which don't have corresponding rows in Tab1.

You can usually get the answer you want more quickly if you include with
your post the DDL for the table(s) (including keys and constraints), some
sample data as INSERT statements and show the result that you require from
that sample data. (www.aspfaq.com/5006)

--
David Portas
------------
Please reply only to the newsgroup
--

Hari Prasad
1/4/2004 3:01:10 PM
Hi,

insert into tab2(col1) select col1 from tab1

or else if we need to load all the columns then

insert into tab2 select col1,col2,col3 from tab1

or

insert into tab2 select * from tab1

Thanks
Hari
MCDBA



[quoted text, click to view]

Petrina Lessard
1/5/2004 1:39:29 AM
I'm receiving the following error

Subquery returned more than 1 value. This is not
permitted when the subquery follows =, !=, <, <= , >, >=
or when the subquery is used as an expression.
The statement has been terminated.

after executing:

UPDATE TAB2
SET PrimKey = (SELECT PrimKey
FROM TAB4
WHERE EngObjectID = Tab4.EngObjectID)

The DDL for the TAB2 and TAB4 are:

CREATE TABLE [dbo].[TAB2] (
[Domain] [nvarchar] (10) COLLATE
SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[EngObjectID] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[AltSpoolNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Description] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[LNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[IsoNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[IsoRev] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ClientsIsoNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ClientsRev] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ClientsShtNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[IsoApproved] [bit] NULL ,
[Area] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Location] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Diameter] [float] NULL ,
[PipeSchedule] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[MatType] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Specification] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[MatLength] [float] NULL ,
[PaintSystem] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Priority] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[PIDNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[DrwgRef] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Insul] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[HeatTrace] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Deleted] [datetime] NULL ,
[Remarks1] [varchar] (100) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Remarks2] [varchar] (100) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[TypeID] [varchar] (4) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ErecRecapNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ErecRecapNoSB] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[MaterialComplete] [bit] NULL ,
[Galvanized] [bit] NULL ,
[PrimKey] [uniqueidentifier] NOT NULL ,
[PercentComplete] [bit] NULL ,
[MatlsComments] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ComPack] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeStamp] [binary] (8) NULL ,
[Created] [datetime] NULL ,
[CreatedBy] [nvarchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Updated] [datetime] NULL ,
[UpdatedBy] [nvarchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[CUT] [bit] NOT NULL ,
[CDL] [bit] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TAB2] WITH NOCHECK ADD
CONSTRAINT [PK_TAB2] PRIMARY KEY CLUSTERED
(
[PrimKey]
) ON [PRIMARY]
GO

CREATE INDEX [IX_TAB2] ON [dbo].[TAB2]([Domain],
[EngObjectID]) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE TABLE [dbo].[TAB4] (
[Domain] [nvarchar] (10) COLLATE
SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[EngObjectID] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[AltSpoolNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Description] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[LNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[IsoNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[IsoRev] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ClientsIsoNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ClientsRev] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ClientsShtNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[IsoApproved] [bit] NULL ,
[Area] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Location] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Diameter] [float] NULL ,
[PipeSchedule] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[MatType] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Specification] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[MatLength] [float] NULL ,
[PaintSystem] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Priority] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[PIDNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[DrwgRef] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Insul] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[HeatTrace] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Deleted] [datetime] NULL ,
[Remarks1] [varchar] (100) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Remarks2] [varchar] (100) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[TypeID] [varchar] (4) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ErecRecapNo] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ErecRecapNoSB] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[MaterialComplete] [bit] NULL ,
[Galvanized] [bit] NULL ,
[PrimKey] [uniqueidentifier] NOT NULL ,
[PercentComplete] [bit] NULL ,
[MatlsComments] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[ComPack] [varchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeStamp] [binary] (8) NULL ,
[Created] [datetime] NULL ,
[CreatedBy] [nvarchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Updated] [datetime] NULL ,
[UpdatedBy] [nvarchar] (50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[CUT] [bit] NOT NULL ,
[CDL] [bit] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TAB4] WITH NOCHECK ADD
CONSTRAINT [PK_TAB4] PRIMARY KEY CLUSTERED
(
[PrimKey]
) ON [PRIMARY]
GO

CREATE INDEX [IX_TAB4] ON [dbo].[TAB4]([Domain],
[EngObjectID]) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

Some sample data from TAB2:

ACG-FFD-WA 2BHC380AE "8""-DO-62D012-
ACD-AE" DO62D012 JRM-FAB-C0074-PIP-380-
SHT.3 A 2DTD1R-DO-62D012.01 C1 2 1
H D 8 C H01A
N/A 02 6200-00
LS03 0
{A1139340-F407-4635-8B1F-00080739AD84}
<Binary> 11/11/2003 12:15:00 AM
DTS 1/5/2004 12:15:09 AM DTS 0 0
ACG-FFD-WA 2BDJ450SA
PW21D131 JRM-FAB-C0074-PIP-450-SHT.1 A
2DTN2D-PW-21D131.01 C1 1 1 J
N 1.5 D D03D
N/A 06 0002-02
LS12 0
{D502DB72-748F-4475-8E25-0009634DAB07}
<Binary> 10/20/2003 12:15:00 AM
DTS 1/5/2004 12:15:09 AM DTS 0 0
ACG-FFD-WA 2BEC456SE
VT15D002 JRM-FAB-C0074-PIP-456-SHT.5 A
2DTD1D-VT-15D002.05 C1 1 1 C
D 6 E E25H
N/A 02 1501-00
LS12 0
Petrina Lessard
1/5/2004 4:34:43 AM
This worked..

UPDATE TAB2
SET PrimKey = (SELECT Primkey FROM TAB4 WHERE
TAB4.EngObjectId = TAB2.EngObjectId)

Thanks,
Petrina
[quoted text, click to view]
David Portas
1/5/2004 7:01:12 PM
My mistake. In haste I had typed a non-existent table name.

The statement you first tried:

[quoted text, click to view]

failed because the subquery attempts to update every row in Tab2 with
multiple rows from Tab4. EngObjectID = Tab4.EngObjectID is equivalent to
Tab4.EngObjectID = Tab4.EngObjectID therefore every row where EngObjectID is
non-NULL will be returned).

--
David Portas
------------
Please reply only to the newsgroup
--

AddThis Social Bookmark Button