在SQLServer存储过程中使用汉字
我有一个由SSIS包调用的存储过程。这个包调用许多存储过程,但只有这个存储过程会导致问题。基本上,我正在将表中的一列从在SQLServer存储过程中使用汉字,sql,sql-server,stored-procedures,ssis,Sql,Sql Server,Stored Procedures,Ssis,我有一个由SSIS包调用的存储过程。这个包调用许多存储过程,但只有这个存储过程会导致问题。基本上,我正在将表中的一列从nchar转换为nvarchar,并将这些值放入另一个表中 这些值可以是英文,也可以是中文 代码如下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[TransformCustomer] AS DECLARE @MapDimCustomer TABLE
nchar
转换为nvarchar
,并将这些值放入另一个表中
这些值可以是英文,也可以是中文
代码如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TransformCustomer]
AS
DECLARE @MapDimCustomer TABLE
(
SourceSystemId INT,
ExCustomerKey NVARCHAR(15),
CustomerName NVARCHAR(115),
CustomerTypeName NVARCHAR(50)
)
INSERT INTO @MapDimCustomer (SourceSystemId, ExCustomerKey, CustomerName, CustomerTypeName)
SELECT
4 As SourceSystemId,
c.ABAN8 As ExCustomerKey,
c.ABALPH As CustomerName,
c.ABAT1 As CustomerTypeName
FROM
F0101 c
LEFT JOIN
GlobalDW.stage.DimCustomer gc ON c.ABAN8 = gc.ExCustomerKey
AND gc.SourceSystemID = 4
WHERE
gc.CustomerID IS NULL;
SELECT * FROM @MapDimCustomer;
那么,它说的是什么
DECLARE @MapDimCustomer TABLE
(
SourceSystemId int,
ExCustomerKey nvarchar(15),
CustomerName nvarchar(115),
CustomerTypeName nvarchar(50)
)
INSERT INTO @MapDimCustomer(SourceSystemId, ExCustomerKey, CustomerName, CustomerTypeName)
CustomerName
可以是英文或中文。当我运行此程序时,它会将中文符号转换为??
。我知道,如果我输入客户名称,我必须使用N'Chinese Characters here'
。有没有办法声明这一点?作为您关于查看第一个字符以确定UNICODE值的问题的答案,应该是这样的
SELECT 4 As SourceSystemId
, c.ABAN8 As ExCustomerKey
, case when UNICODE(left(c.ABALPH, 1)) > 127 then c.ABALPH else c.ABDC end As CustomerName
, c.ABAT1 As CustomerTypeName
FROM F0101 c
LEFT JOIN GlobalDW.stage.DimCustomer gc ON c.ABAN8 = gc.ExCustomerKey
AND gc.SourceSystemID = 4
WHERE gc.CustomerID IS NULL;
我怀疑F0101.CustomerName中的数据类型是varchar?这意味着该表中的数据已经删除了汉字,并替换为?因为varchar不支持这些字符。没有任何级别的转换或任何东西可以恢复这些字符…它们不见了。不,F0101中的数据是nchar。因此,如果只运行上面insert的select语句部分,您会看到中文字符吗?是的,这是正确的。好的,我再次运行了该过程,它工作正常。删除此问题。