0
我想將我的JSON數據轉換爲SQL Server中的表格格式。 以下是我的JSON數據:OPENJSON無法解析中文字符
[{
"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": "李"
}]'
--Method 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
--Method 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 EMP_NAME emp_name2
001 |數據管理|彼得| ??
002 |軟件工程師|李| ?
任何想法如何在解析數據到臨時表後保留原始漢字?
謝謝。
*編輯: 我知道它可以通過將一個額外的「否」的JSON
set @JSON=N'[
{ "emp_no": "001...
.....
前面的工作,但實際上是JSON是一個存儲過程的參數,我不能簡單地添加A 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.....
對不起,我做的沒有提到清楚,實際上我的JSON是一個存儲過程中的參數。 我不能簡單地把一個「N」在它的面前,如果我嘗試做這樣的事情: \t集JSON =「N」 + JSON 我會打一個錯誤,由於N將導致無效JSON格式的錯誤。 –
@CheeHouNg你如何調用存儲過程?顯示代碼。 – Tomalak
@Tomalak 只是一個正常的C#代碼: 'var serializer = new JavaScriptSerializer(); var JsonString = serializer.Serialize(List_EmpInfo); string connS = ConfigurationManager.ConnectionStrings [「DB_Connn」]。ConnectionString; SqlConnection connection = new SqlConnection(connS); SqlCommand cmd = new SqlCommand(「SP_StoreEmpInfo」,連接) {0} {0} {0} CommandType = CommandType。StoredProcedure }; cmd.Parameters.AddWithValue(「@ Json」,JsonString);' –