Je suis en train de convertir mes données JSON dans un format de table dans SQL Server. Voici mes données JSON:OPENJSON impossible d'analyser les caractères chinois
[{
"emp_no": "001",
"emp_designation":"Data Admin",
"emp_name": "Peter",
"emp_name2": "彼特"
},
{
"emp_no": "002",
"emp_designation":"Software Engineer",
"emp_name": "Lee",
"emp_name2": "李"
}]
Ce que j'avais essayé sont:
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
Cependant , les deux table de temp me renvoyer fol résultat bas, avec les caractères chinois restent comme "???". table Temp résultat sélectionnez
emp_no emp_designation emp_name emp_name2
001 | Données Admin | Peter | ??
002 | Ingénieur logiciel | Lee | ?
Une idée de comment préserver les caractères chinois d'origine après avoir analysé les données dans la table temporaire?
Merci.
* Edit: Je sais qu'il peut travailler en mettant un extra « N » devant le JSON
set @JSON=N'[
{ "emp_no": "001...
.....
Mais en fait le JSON est un paramètre dans un magasin de procédure, je ne peux pas ajouter simplement une N comme: set @JSON = 'N' + @JSON, ce qui mettra en péril le format des données JSON et provoquera une erreur.
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.....
Désolé que je fais ne mentionne pas clairement, en fait mon JSON est un paramètre dans une procédure stockée. Je ne peux pas simplement mettre un « N » devant elle, si j'essaie de faire quelque chose comme ceci: \t set JSON = « N » + JSON Je frapperai une erreur, car la N entraînera la une erreur de format JSON invalide. –
@CheeHouNg Comment appelez-vous la procédure stockée? Afficher le code – Tomalak
@Tomalak Juste un code C# normal: 'var serializer = new JavaScriptSerializer(); var JsonString = serializer.Serialize (List_EmpInfo); chaîne connS = ConfigurationManager.ConnectionStrings ["DB_Connn"]. ConnectionString; SqlConnection connection = nouvelle SqlConnection (connS); SqlCommand cmd = nouvelle SqlCommand ("SP_StoreEmpInfo", connexion) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.AddWithValue ("@ Json", JsonString); ' –