Sql server OPENJSON无法分析中文字符

Sql server OPENJSON无法分析中文字符,sql-server,json,Sql Server,Json,我正在尝试将JSON数据转换为SQL Server中的表格式。 以下是我的JSON数据: [{ "emp_no": "001", "emp_designation":"Data Admin", "emp_name": "Peter", "emp_name2": "彼特" }, { "emp_no": "002", "emp_designation":"Software Engineer", "emp_name": "Lee",

我正在尝试将JSON数据转换为SQL Server中的表格式。 以下是我的JSON数据:

[{
    "emp_no": "001",
    "emp_designation":"Data Admin",
    "emp_name": "Peter",
    "emp_name2": "彼特"
  },
  {
    "emp_no": "002",
    "emp_designation":"Software Engineer",
    "emp_name": "Lee",
    "emp_name2": "李"
  }]
我试过的是:

DECLARE @JSON NVARCHAR(MAX)

set @JSON='[{
"emp_no": "001",
"emp_designation":"Data Admin",
"emp_name": "Peter",
"emp_name2": "彼特"},
 {
"emp_no": "002",
"emp_designation":"Software Engineer",
"emp_name": "Lee",
"emp_name2": "李"
 }]'
--方法1

--方法2

然而,这两个临时表都返回我下面的结果,其中的汉字仍然是“?”。 临时表选择结果

emp_无emp_名称emp_名称2

001 |数据管理员|彼得|

002 |软件工程师|李|

在将数据解析到临时表后,您知道如何保留原始汉字吗

谢谢

*编辑: 我知道它可以通过在JSON前面加上一个“N”来工作

set @JSON=N'[
    { "emp_no": "001...
   .....
但实际上JSON是存储过程中的一个参数,我不能简单地添加一个N,比如:set@JSON='N'+@JSON, 这将破坏JSON数据的格式,并导致错误

ALTER PROCEDURE [dbo].[SP_StoreEmpInfo]
 @JSON NVARCHAR(max)

 @JSON = 'N' + @JSON

/*Will cause invalid JSON format error */
SELECT 
JSON_Value (EMP.VALUE, '$.emp_no') as.....

请尝试在sql集合之前添加“N”,以指示其中包含unicode字符,如下所示:

DECLARE @JSON NVARCHAR(MAX)

set @JSON=N'[{
"emp_no": "001",
"emp_designation":"Data Admin",
"emp_name": "Peter",
"emp_name2": "彼特"},
 {
"emp_no": "002",
"emp_designation":"Software Engineer",
"emp_name": "Lee",
"emp_name2": "李"
 }]'
这个问题可能有助于了解以下背景:

尝试在sql集合之前添加“N”,以指示其中包含unicode字符,如下所示:

DECLARE @JSON NVARCHAR(MAX)

set @JSON=N'[{
"emp_no": "001",
"emp_designation":"Data Admin",
"emp_name": "Peter",
"emp_name2": "彼特"},
 {
"emp_no": "002",
"emp_designation":"Software Engineer",
"emp_name": "Lee",
"emp_name2": "李"
 }]'
这个问题可能有助于了解以下背景:

很抱歉,我没有明确提到,实际上我的JSON是存储过程中的一个参数。我不能简单地在它前面加上一个“N”,如果我尝试这样做:set JSON='N'+JSON,我将遇到一个错误,因为N将导致一个无效JSON格式的错误。@CheeHouNg如何调用存储过程?显示代码。@Tomalak只是一个普通的c代码:
var serializer=new JavaScriptSerializer();var JsonString=serializer.Serialize(List_EmpInfo);string connS=ConfigurationManager.ConnectionStrings[“DB_Connn”].ConnectionString;SqlConnection=newsqlconnection(connS);SqlCommand cmd=newsqlcommand(“SP_StoreEmpInfo”,connection){CommandType=CommandType.StoredProcedure};cmd.Parameters.AddWithValue(“@Json”,JsonString)抱歉,我是新来的,代码可能看起来很脏,因为我不知道如何在SO的注释部分换行。@Tomalak它与以下代码
cmd.Parameters.Add一起工作(“@JsonString”,SqlDbType.NVarChar,-1)谢谢。很抱歉我没有明确提到,实际上我的JSON是存储过程中的一个参数。我不能简单地在它前面加上一个“N”,如果我尝试这样做:set JSON='N'+JSON,我将遇到一个错误,因为N将导致一个无效JSON格式的错误。@CheeHouNg如何调用存储过程?显示代码。@Tomalak只是一个普通的c代码:
var serializer=new JavaScriptSerializer();var JsonString=serializer.Serialize(List_EmpInfo);string connS=ConfigurationManager.ConnectionStrings[“DB_Connn”].ConnectionString;SqlConnection=newsqlconnection(connS);SqlCommand cmd=newsqlcommand(“SP_StoreEmpInfo”,connection){CommandType=CommandType.StoredProcedure};cmd.Parameters.AddWithValue(“@Json”,JsonString)抱歉,我是新来的,代码可能看起来很脏,因为我不知道如何在SO的注释部分换行。@Tomalak它与以下代码
cmd.Parameters.Add一起工作(“@JsonString”,SqlDbType.NVarChar,-1)谢谢。
DECLARE @JSON NVARCHAR(MAX)

set @JSON=N'[{
"emp_no": "001",
"emp_designation":"Data Admin",
"emp_name": "Peter",
"emp_name2": "彼特"},
 {
"emp_no": "002",
"emp_designation":"Software Engineer",
"emp_name": "Lee",
"emp_name2": "李"
 }]'