Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLServer存储过程中使用汉字_Sql_Sql Server_Stored Procedures_Ssis - Fatal编程技术网

在SQLServer存储过程中使用汉字

在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

我有一个由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'
。有没有办法声明这一点?

作为您关于查看第一个字符以确定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语句部分,您会看到中文字符吗?是的,这是正确的。好的,我再次运行了该过程,它工作正常。删除此问题。