Sql server 插入vs更新

Sql server 插入vs更新,sql-server,Sql Server,我有一个表,其中所有字段都声明为nvarchar。如果我在表中插入所有unicode字符,字段中的字符都会很好。但是当我更新的时候,我丢失了一些角色。以下是我的声明: UPDATE TableII SET LOCATION = CAST(( COALESCE([CITY], N'') + NCHAR(13) + NCHAR(10) + COALESCE([INSTALLATION], N'') + NCHAR(13)

我有一个表,其中所有字段都声明为nvarchar。如果我在表中插入所有unicode字符,字段中的字符都会很好。但是当我更新的时候,我丢失了一些角色。以下是我的声明:

UPDATE TableII
     SET    LOCATION = CAST(( COALESCE([CITY], N'') + NCHAR(13) + NCHAR(10)
                              + COALESCE([INSTALLATION], N'') + NCHAR(13)
                              + NCHAR(10) + LEFT(LOCATION.LATLONG, 2) + N'°'
                              + SUBSTRING(LOCATION.LATLONG, 3, 2) + N''''
                              + SUBSTRING(LOCATION.LATLONG, 5, 2) + NCHAR(34)
                              + N' ' + SUBSTRING(LOCATION.LATLONG, 7, 1)
                              + N' ' + SUBSTRING(LOCATION.LATLONG, 8, 3)
                              + N'°' + SUBSTRING(LOCATION.LATLONG, 11, 2)
                              + N'''' + SUBSTRING(LOCATION.LATLONG, 13, 2)
                              + NCHAR(34) + N' ' + SUBSTRING(LOCATION.LATLONG,
                                                             15, 1) ) AS NVARCHAR(MAX))
     FROM   TABLEII
            INNER JOIN LOC ON TABLEII.REC = LOC.REC
            INNER JOIN LOCATION ON LOC.LOCRECNUM = LOCATION.LOCRECNUM
     WHERE  ( LOC.LOCSEQ = '1' )
正如您所看到的,我尝试了各种方法来强制unicode字符不丢失,但它不起作用


你知道为什么insert可以很好地工作,但是这个更新不能吗?

城市栏是NVARCHAR吗?如果不是,则合并将把该列作为其数据类型并使用它,而不管您对代码的其余部分做了什么。

No!我想这就是问题所在,谢谢。如果可以,我会接受答案。
nvarchar
的优先级高于
varchar
COALESCE('',N'')
的数据类型是
nvarchar
LOCATION.LATLONG
nvarchar?当你说你正在“丢失”字符时,你的确切意思是什么?字符串被截断或正在转换为
或ASCII等效值。