关键字' convert'附近的语法不正确。在Merge语句SQL Server中

时间:2018-02-12 10:08:07

标签: sql sql-server sql-server-2008 merge

我有一个表测试,其中1列作为数据类型,如ntext。

我正在写下面的查询:

when matched and TARGET.Module_ID<>SOURCE.Module_ID

THEN 
UPDATE SET TARGET.Module_ID=SOURCE.Module_ID 

但它给了我一个错误

The data types ntext and ntext are incompatible in the not equal to operator.

然后我将查询更改为

when matched and TARGET.convert(varchar(max),Module_ID) <> SOURCE.convert(varchar(max),Module_ID)

它给了我一个错误

   Incorrect syntax near the keyword 'convert'. 

查询有什么问题?

2 个答案:

答案 0 :(得分:1)

您是否查看了CONVERT的文档? 你这样使用它:

convert(varchar(max), TARGET.Module_ID) <> convert(varchar(max), SOURCE.Module_ID)

所以你的陈述是:

WHEN matched and convert(varchar(max), TARGET.Module_ID) <> convert(varchar(max), SOURCE.Module_ID)    
THEN 
UPDATE SET TARGET.Module_ID=SOURCE.Module_ID 

也是warning的一句话:

  

重要!将删除ntext,text和image数据类型   SQL Server的未来版本。避免在新的中使用这些数据类型   开发工作,并计划修改当前使用的应用程序   他们。请改用nvarchar(max),varchar(max)和varbinary(max)。

答案 1 :(得分:0)

另一种选择是使用CAST功能。

when matched and CAST(TARGET.Module_ID AS VARCHAR(MAX)) <> CAST(SOURCE.Module_ID AS VARCHAR(MAX))

您可以在此处阅读更多内容 - https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql