J'ai deux tables dans différentes bases de données sur le même serveur de base de données.
Les deux bases de données ont la même structure, mais des données différentes. Database1 (Test1) est la dernière, et database2 (Test2) est une ancienne copie de la base de données.
Employee
avec 3000 enregistrementsEmployee
avec 1000 enregistrementsJe dois mettre à jour la table dans Test1 à partir de la même table dans Test2 pour une colonne particulière appelée DeptID, car les valeurs de la table Employee de la base de données Test2 (l'ancienne) ont été mises à jour. J'ai donc besoin de mettre à jour la table dans la nouvelle base de données à partir de la table de l'ancienne base de données, qui compte environ 1000 lignes.
En d'autres termes, je dois mettre à jour la colonne DeptID
de la table Employee
de la base de données Test1
avec les valeurs que j'ai dans la colonne DeptID
de la table Employee
de la base de données Test2
.
Je sais que je peux restaurer la base de données elle-même, mais ce n'est pas une solution. Je dois mettre à jour les valeurs de la base de données Test1 à partir de la base de données Test2.
Si les deux bases de données se trouvent sur le même serveur, vous devriez pouvoir créer une instruction SQL de la manière suivante:
UPDATE Test1.dbo.Employee
SET DeptID = emp2.DeptID
FROM Test2.dbo.Employee as 'emp2'
WHERE
Test1.dbo.Employee.EmployeeID = emp2.EmployeeID
De votre message, je ne sais pas très bien si vous voulez mettre à jour Test1.dbo.Employee
avec les valeurs de Test2.dbo.Employee
(c'est ce que fait ma requête), ou l'inverse (puisque vous avez mentionné la base de données sur Test1
était la nouvelle table ......)
update t2
set t2.deptid = t1.deptid
from test1 t1, test2 t2
where t2.employeeid = t1.employeeid
UPDATE table1
SET column1 = (SELECT expression1
FROM table2
WHERE conditions)
[WHERE conditions];
update test1 t1, test2 t2
set t2.deptid = t1.deptid
where t2.employeeid = t1.employeeid
vous ne pouvez pas utiliser de mot-clé pour le mysql
Essayez une requête comme
INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;
cela fonctionne à merveille - pas à son tour d'appeler ce code de formulaire de procédure avec DataTable avec un schéma correspondant exactement au custType créer un client de table ( id int identité (1,1) clé primaire, nom 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);
}
}
}