我有一个使用SQL Server 2008 R2的测试和生产环境。我想将一些列从测试环境更新为产品环境。我的查询对我来说很有意义,但始终会出错。非常感谢任何有关如何进行此操作的建议。
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
我收到以下错误:
无法准备消息8180,级别16,状态1,行1的语句。消息306,级别16,状态2,行1
无法对文本,ntext和图像数据类型进行比较或排序,除非使用IS NULL或LIKE运算符。
该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进程之外实例化提供程序时,不允许更新或插入引用长列(文本,ntext或图像)的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句