【发布时间】:2017-08-14 19:51:16
【问题描述】:
我有一个由 SSIS 包调用的存储过程。这个包调用了许多存储过程,但这个特定的一个是唯一引起问题的。基本上,我将表中的列从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'。有没有办法声明?
【问题讨论】:
-
我怀疑F0101.CustomerName中的数据类型是varchar?这意味着该表中的数据已经删除了汉字并替换为?因为 varchar 不支持这些字符。没有任何级别的转换或任何可以恢复这些字符的方法......它们已经消失了。
-
不,F0101中的数据是nchar。
-
所以如果你只运行上面插入的 select 语句部分,你会看到中文字符吗?
-
是的,没错。
-
好的,我再次运行了该程序,它成功了。删除此问题。
标签: sql sql-server stored-procedures ssis