* Bonjour, *
Peut on utiliser en paramètre d'une procédure stockée le nom de la base de données à utiliser.
Exemple : pour importer des données d'une base vers une autre.
* Merci *
* Bonjour, *
Peut on utiliser en paramètre d'une procédure stockée le nom de la base de données à utiliser.
Exemple : pour importer des données d'une base vers une autre.
* Merci *
Oui, mais la proc stoc doit utiliser du sql dynamique (appelé par la fonction Execute).
Exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE PROCEDURE [dbo].[test] @dbName varchar(100) AS BEGIN declare @sqlStatement varchar(100) set @sqlStatement = 'select * from ' + @dbName + '.dbo.table_1' exec(@sqlStatement) END GO
ok, merci pour ta réponse.
je connaissais cette solution mais j'espérais trouver une autre alternative plus simple.
Utilser EXEC fonctionne dans une procédure stockée mais pas dans une fonction.
D'où la question suivante : si j'ai besoin de faire du SQL "dynamique" en construisant une chaine sql à partir d'arguments d'entrée comme le nom de la base, le nom de la table, etc..., et que j'ai AUSSI besoin de retourner une valeur (par exemple je veux écrire une fonction générique qui retourne le nombre d'enregistrement avec comme arguments d'entrée le nom de la base, le nom de la table et une condition WHERE .... (tous ça sous forme de chaine), comment je fais ?
Les fonctions sont, de manière générale, très strictes concernant leur contenu. Notamment, elles n'admettent pas les contenus non prédictif (c'est le cas d'un EXEC('chaine de caractére')) et les modifications de tables (avec quelques exceptions très encadrées - quoique ce soit un peu moins strict dans le cas de Sql Server 2008).
Dans votre cas, vous pouvez toujours utiliser une proc stoc avec un/des paramètres output.
Partager