Bonjour,
Je n'arrive pas à exécuter ma requête T-SQL dynamique lorsque celle-ci vise des champs au format Unicode (nvarchar). Voici un exemple concret que vous pouvez essayer, qui illustre mon problème.
Voici le code de création de la base :
Cette table contient les éléments suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE [dbo].[essai]( [Id] [int] NOT NULL, [Nom] [nvarchar](50) NULL, [Prenom] [nvarchar](50) NULL, [Age] [int] NULL )
Voici le code de ma requête dynamique exemple. Bien sûr elle n'a pas beaucoup d'intérêt puisque je ne lui passe aucune variable en paramètre, mais c'est le cas de ma véritable requête et cela ne fonctionne pas non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Id | Nom | Prenom | Age 1 | Hugo | Victor | 80 2 | Lagaffe | Gaston | 25
Voici les messages d'erreurs générés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 declare @sql nvarchar(100) declare @param nvarchar (200) declare @test nvarchar(200) set @param = N'@answer nvarchar(200) output' set @sql = N'select @answer = Age From essai where Id = 1' exec sp_executesql @sql, @param, @answer = @test output print @test set @sql = N'select @answer = Age From essai where Nom = Hugo and Prenom = Victor' exec sp_executesql @sql, @param, @answer = @test output
Vous noterez que ma première requête est passée sans problème (j'interroge le champs Id qui est en int) et que la deuxième a planté (cette fois-ci ce sont deux colonnes nvarchar que j'interroge)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 80 Msg*207, Niveau*16, État*1, Ligne*1 Nom de colonne non valide*: 'Hugo'. Msg*207, Niveau*16, État*1, Ligne*1 Nom de colonne non valide*: 'Victor'.
Est-ce normal, comment contourner ce problème, cela vient-il de mon code ?
Partager