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 :
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
)
Cette table contient les éléments suivants :
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 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
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
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
 
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'.
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)
Est-ce normal, comment contourner ce problème, cela vient-il de mon code ?