Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/07/2011, 10h45   #1
Invité de passage
 
Homme
Développeur .NET
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Lot (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 2
Points : 0
Points : 0
Par défaut Fonction Table et dynamic SQL

Bonjour,

Voici ma fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ALTER FUNCTION [dbo].[Synchro_GetIds]
(
@IdRequest int;
)
RETURNS @tt TABLE
(
Ids int NOT NULL
)
AS
Begin
DECLARE @myFirstRequest VARCHAR(8000);
 
-- for obtain the filter request exemple : 'SELECT IDRETURN FROM DB_TEST where IDRETURN>1000'
SELECT @myFirstRequest=Request_Text FROM T_REQUEST
WHERE id_Request = @IdRequest
 
 
INSERT INTO @tt
SELECT E_D.ID FROM E_D WHERE E_D.IDRETURN IN (@myFirstRequest)
 
 
RETURN;
END
Comment puis-je faire pour que la chaîne de caractères correspondant à une requête SQL soit interprétée comme une commande SQL et non comme un paramètre ?

Merci d'avance.
Cyril46100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 11h38   #2
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Code :
1
2
 
EXEC sp_executesql @myFirstRequest
@myFirstRequest devrait être du NVARCHAR plutôt que du VARCHAR
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 13h36   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Sergejack, je ne sais pas si c'est ce que vous suggérez, mis il n'est pas possible d'appeler une procédure stockée qui n'est pas étendue dans une fonction.

Je suppose que ce que vous proposez d'appeler directement sp_executesql.
Pour cela il faut une procédure stockée, pas une fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE PROCEDURE usp_Synchro_GetIds
	@IdRequest int
AS
BEGIN
	SET NOCOUNT ON
 
	DECLARE @myFirstRequest varchar(max)
		, @sql nvarchar(max);
 
	SELECT	@myFirstRequest = Request_Text 
	FROM	dbo.T_REQUEST
	WHERE	id_Request = @IdRequest
 
	SET	@sql = 'SELECT E_D.ID FROM E_D WHERE E_D.IDRETURN IN (' + @myFirstRequest + ')'
	EXEC	sp_executesql @sql
END
A lire

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h06.


 
 
 
 
Partenaires

Hébergement Web