我试图将我的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
SELECT * INTO #emp_temp FROM OPENJSON(@JSON)
WITH (emp_no varchar(20),
emp_designation varchar(50),
emp_name NVARCHAR(100),
emp_name2 NVARCHAR(100))
SELECT * FROM #Emp_temp
DROP TABLE #Emp_temp
- 方法2
SELECT
JSON_Value (EMP.VALUE, '$.emp_no') as emp_no,
JSON_Value (EMP.VALUE, '$.emp_designation') as emp_designation,
JSON_Value (EMP.VALUE, '$.emp_name') as emp_name,
JSON_Value (EMP.VALUE, '$.emp_name2') as emp_name2
INTO #Emp_temp2
FROM OPENJSON (@JSON) as EMP
SELECT * FROM #Emp_temp2
DROP TABLE #Emp_temp2
然而,两个临时表都返回了我的结果,中文字符仍为" ???"。 临时表选择结果
emp_no emp_designation \ temp_name \ temp_name2
001 |数据管理员|彼得| ??
002 |软件工程师|李| ?
知道在将数据解析成临时表后如何保留原始汉字?
感谢。
*编辑: 我知道它可以通过增加一个额外的N'在JSON前面
set @JSON=N'[
{ "emp_no": "001...
.....
但实际上JSON是Store Procedure中的一个参数,我不能简单地添加一个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.....
答案 0 :(得分:2)
尝试在sql set之前添加'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": "李"
}]'
这个问题可能有助于背景: What does N' stands for in a SQL script ? (the one used before characters in insert script)