![](/img/trans.png)
[英]UPDATE record in one database with values from another in SQL Server 2008?
[英]Update SQL Server Database from another db
我有一个使用SQL Server 2008 R2的测试和生产环境。 我想从我的测试环境更新一些列到我的prod环境。 我的查询对我有意义,但它一直存在错误。 任何有关如何处理此事的建议都非常感谢。
use [NGProd]
update nxmd_practice_web_text
set nxmd_practice_web_text.item_value = TST.item_value
from [TestSQL1].[NGTest].[dbo].[nxmd_practice_web_text] TST
where TST.nx_modified_by = '00000000-0000-0000-0000-000000002692'
and nxmd_practice_web_text.item_id = 4100
and nxmd_practice_web_text.nx_practice_id = TST.nx_practice_id
我收到以下错误:
Msg 8180,Level 16,State 1,Line 1
声明无法准备。Msg 306,Level 16,State 2,Line 1
除非使用IS NULL或LIKE运算符,否则无法比较或排序text,ntext和image数据类型。
item_value
列是ntext
但我没有比较它。 我正在设置它,所以这个错误让我很困惑。
我知道ntext
数据类型已被弃用,但我无能为力。 这是一种付费产品,在数千个表中包含数百万行数据。 如果没有在将来的更新(每半年发布一次)中将其转换回来,我无法修改此行类型。
任何帮助是极大的赞赏。
谢谢。
在尝试使用Sql 2008和Sql 2000服务器重新创建错误之后,当我将nx_modified_by更改为ntext或者将practice_id更改为ntext时,我只能得到类似的错误。 Sql Server 2008错误消息是:
消息402,级别16,状态1,行8数据类型ntext和varchar在等于运算符中不兼容。
我猜nx_modified_by也是ntext(而不是unique_identifier),但是如果它是nx_practice_id,则包括注释掉的行。
尝试这个:
use [NGProd]
go
update prod
set prod.item_value = tst.item_value
from NGProd.[dbo].[nxmd_practice_web_text] as prod
inner join [TestSQL1].[NGTest].[dbo].[nxmd_practice_web_text] as tst
on prod.nx_practice_id = tst.nx_practice_id
/*
on cast(prod.nx_practice_id as varchar(8000))
= cast(prod.nx_practice_id as varchar(8000))
--*/
where prod.item_id = 4100
and cast(tst.nx_modified_by as varchar(36))
= '00000000-0000-0000-0000-000000002692'
--and tst.nx_modified_by = '00000000-0000-0000-0000-000000002692'
此外,请确保在“链接服务器属性”上启用了“处理中”
允许进程
SQL Server允许将提供程序实例化为进程内服务器。 如果未设置此选项,则默认行为是在SQL Server进程外实例化提供程序。 在SQL Server进程外部实例化提供程序可以保护SQL Server进程免受提供程序中的错误的影响。 在SQL Server进程外部实例化提供程序时,不允许引用长列(text,ntext或image)的更新或插入。
那里有几个问题。 发出更新并从联接查询中获取值时,您需要更新别名。 否则你可以得到一些时髦的结果。 您可以将更新更改为更像这样的内容。
update wt
set item_value = cast(TST.item_value as varchar(max))
from [TestSQL1].[NGTest].[dbo].[nxmd_practice_web_text] TST
join nxmd_practice_web_text wt on wt.nx_practice_id = TST.nx_practice_id
where TST.nx_modified_by = '00000000-0000-0000-0000-000000002692'
and wt.item_id = 4100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.