我正在尝试替换开发服务器上的乱码(从生产服务器中恢复)。
我首先尝试使用SSMS的“导入数据”任务,但遇到一条错误消息:“无法用外键约束截断表”,因此我决定执行以下操作:
这是我的脚本:
DECLARE @IdToCopy INT;
DECLARE @cnt INT;
SET @IdToCopy = 1
WHILE @IdToCopy <= 55
BEGIN
UPDATE DocumentTypes
SET Name = DocumentTypesTemp.Name
FROM DocumentTypesTemp
WHERE DocumentTypesTemp.DocumentTypeId = @IdToCopy;
SET @IdToCopy += 1;
END;
我希望它更新表以使其具有相同的值,但唯一的值是复制表中最后一行的值。
答案 0 :(得分:0)
我希望它更新表以使其具有相同的值,但是 唯一的值是复制表中最后一行的值。
在while
循环的每次迭代中,整个DocumentTypes
表都将更新。这就是原因,您只看到最后一个记录名称出现在整个表中,您必须根据ID将源表和目标表连接在一起。
UPDATE dest
SET dest.NAME = src.NAME
FROM documenttypes dest
INNER JOIN documenttypestemp src
ON src.documenttypeid = dest.documenttypeid
以上查询将在单个查询中将匹配documenttypeid
的名称从目标表更新为源表。
注意:您不需要一会儿就可以将名称从源更新为目标。
答案 1 :(得分:0)
我使用以下命令修复了脚本:
DECLARE @IdToCopy INT;
DECLARE @cnt INT;
DECLARE @NameToCopy varchar(256);
SET @IdToCopy=1
SELECT @cnt=COUNT(*) FROM DocumentTypesTemp;
WHILE @IdToCopy <= @cnt
BEGIN
SELECT @NameToCopy=Name
FROM DocumentTypesTemp
WHERE DocumentTypesTemp.DocumentTypeId=@IdToCopy;
UPDATE DocumentTypes
SET Name=@NameToCopy
WHERE DocumentTypes.DocumentTypeId=@IdToCopy;
SET @IdToCopy += 1;
END;