Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 19/05/2011, 11h32   #1
Nouveau Membre du Club
 
Homme Nicolas
Chef de projet informatique dans une société de distribution
Inscription : août 2002
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Chef de projet informatique dans une société de distribution
Secteur : Biens de consommation

Informations forums :
Inscription : août 2002
Messages : 70
Points : 29
Points : 29
Par défaut Requete avec clause where dynamique

Bonjour,

Dans le cas d'une réplication, j'aurais besoin de filtrer les lignes avec des paramètres dynamiques. Pour cela, j'ai fait une fonction scalaire qui me retourne la chaîne de caractères contenant le détail de la clause where.
Par exemple, ma fonction getWhereClause(param1,param2) retourne : societe='A' and site='S1'.

Je voudrais filtrer dynamiquement et donc faire une requête du type
Code :
SELECT * FROM maTable WHERE getWhereClause(param1,param2)
qui exécuterait la requête
Code :
SELECT * FROM maTable WHERE societe='A' AND site='S1'
Actuellement, j'ai le message d'erreur :
Citation:
Expression de type non booléen spécifiée dans un contexte où une condition est attendue, près de ')'.
Je fais donc appel à vos lumières. Si cela n'est pas possible, je ferai autrement.

Merci d'avance.
shyangel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 12h00   #2
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,

C'est tout à fait possible avec sp_executesql.

Pour cela :

Code :
1
2
3
4
DECLARE @sql nvarchar(256)
 
SELECT	@sql = 'SELECT mesColonnes FROM dbo.maTable WHERE ' + dbo.getWhereClause(@param1, @param2)
EXEC	sp_executeSQL @sql
@++
__________________
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
Vieux 19/05/2011, 12h17   #3
Nouveau Membre du Club
 
Homme Nicolas
Chef de projet informatique dans une société de distribution
Inscription : août 2002
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Chef de projet informatique dans une société de distribution
Secteur : Biens de consommation

Informations forums :
Inscription : août 2002
Messages : 70
Points : 29
Points : 29
Merci pour la réponse.
Ca fonctionne en exécutant dans une nouvelle requête.
Maintenant, je complique les choses, parce qu'il faudrait que je puisse mettre ce filtre dans la boîte de dialogue "Filtrer les lignes" d'une réplication :

Code :
SELECT <published_columns> FROM [dbo].[BPCUSTOMER] WHERE
La requête initialisée est celle ci-dessus et je ne peux qu'ajouter des conditions après le WHERE.

Des idées pour faire la même chose dans ce contexte ?
shyangel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 13h10   #4
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
Malheureusement je n'ai pas encore utilisé la réplication, donc je ne peux pas vous aider ... mais les autres participants, oui !

@++
__________________
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 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h38.


 
 
 
 
Partenaires

Hébergement Web