如何从SQL Server 2005中的另一个表中的相应数据更新一个表中的数据

时间:2011-02-07 10:50:48

标签: sql-server-2005

我在同一个数据库服务器上的不同数据库中有两个表。

两个数据库都具有相同的结构,但数据不同。 Database1(Test1)是最新的,而database2(Test2)是数据库的旧副本。

  • Test1有一个名为Employee的表,有3000条记录
  • Test2有一个名为Employee的表,有1000条记录

我需要在Test2中的同一个表中为名为DeptID的特定列更新Test1中的表,因为Test2 DB(旧的)中Employee表中的值已更新。所以我需要从旧DB中的表中更新新DB中的表,该表有大约1000行。

换句话说,我需要使用DeptID列中Employee列中的任何值更新Test1数据库中DeptID表中的EmployeeTest2数据库中的{1}}表。

我知道我可以恢复数据库本身,但这不是解决方案。我需要从Test2数据库更新Test1数据库中的值。

7 个答案:

答案 0 :(得分:138)

如果两个数据库在同一台服务器上,您应该能够创建如下所示的SQL语句:

UPDATE Test1.dbo.Employee
SET DeptID = emp2.DeptID
FROM Test2.dbo.Employee as 'emp2'
WHERE
   Test1.dbo.Employee.EmployeeID = emp2.EmployeeID

在您的帖子中,我不太清楚您是否希望更新 Test1.dbo.Employee来自Test2.dbo.Employee(这是我的查询所做的)的值,或者其他方式(因为你提到Test1上的数据库是新表......)

答案 1 :(得分:14)

update t2
set t2.deptid = t1.deptid
from test1 t1, test2 t2
where t2.employeeid = t1.employeeid

答案 2 :(得分:2)

UPDATE table1
SET column1 = (SELECT expression1
               FROM table2
               WHERE conditions)
[WHERE conditions];

答案 3 :(得分:0)

尝试像

这样的查询
INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;

答案 4 :(得分:0)

这可以创造奇迹 - 轮到使用DataTable调用此过程表单代码,其模式与custType完全匹配     创建表客户      (      id int identity(1,1)主键,      name varchar(50),      cnt varchar(10)      )

 create type custType as table
 (
 ctId int,
 ctName varchar(20)
 )

 insert into customer values('y1', 'c1')
 insert into customer values('y2', 'c2')
 insert into customer values('y3', 'c3')
 insert into customer values('y4', 'c4')
 insert into customer values('y5', 'c5')

 declare @ct as custType 
 insert @ct (ctid, ctName) values(3, 'y33'), (4, 'y44')
 exec multiUpdate @ct

 create Proc multiUpdate (@ct custType readonly) as begin
 update customer set  Name = t.ctName  from @ct t where t.ctId = customer.id
 end

public DataTable UpdateLevels(DataTable dt)
        {
            DataTable dtRet = new DataTable();
            using (SqlConnection con = new SqlConnection(datalayer.bimCS))
            {
                SqlCommand command = new SqlCommand();
                command.CommandText = "UpdateLevels";
                command.Parameters.Clear();
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@ct", dt).SqlDbType = SqlDbType.Structured;
                command.Connection = con;
                using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
                {
                    dataAdapter.SelectCommand = command;
                    dataAdapter.Fill(dtRet);
                }
            }
}

答案 5 :(得分:-1)

 UPDATE Employee SET Empid=emp3.empid 
 FROM EMP_Employee AS emp3
 WHERE Employee.Empid=emp3.empid

答案 6 :(得分:-3)

使用test1

插入employee(deptid)从test2.dbo.employee选择deptid