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 26/07/2011, 13h53   #1
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 119
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2008
Messages : 119
Points : 35
Points : 35
Par défaut Cuseur et variable dans le FROM

Bonne rencontre,

Je possède X base de données avec la même structure. J’ai essayé de faire une PS qui contient un curseur qui fonctionne dynamiquement. Je n’arrive pas à trouver par contre la bonne syntaxe pour avoir une variable qui contient le nom de la DB dans le FROM.

En gros actuellement, ça ressemble à ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
USE [master]
GO
/****** Object:  StoredProcedure [dbo].[test]    Script Date: 07/26/2011 10:25:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[test]
    @dbname sysname
AS
BEGIN
    SET NOCOUNT ON
 
    IF @dbname IS NULL
    BEGIN
        RAISERROR('A database name has to be passed', 16, 1)
        RETURN
    END
 
    IF NOT EXISTS
    (
        SELECT    *
        FROM    sys.DATABASES
        WHERE    name = @dbname
        AND    state_desc <> 'ONLINE'
    )
    BEGIN
        RAISERROR('The %s database does not exist or is not available',6, 1,@dbname)
        RETURN
    END
 
    --DECLARE @sql nvarchar(max)
   -- SET    @sql = 'SELECT * FROM ' + @dbname + '.dbo.Clients'
   -- EXEC    sp_executesql @sql
   DECLARE @mail char(50);
 
  DECLARE @dbEnCours char(200);
 
  SET @dbEnCours = @dbname + 'dbo.Clients';
 
  DECLARE c_clientsDbSs CURSOR FOR SELECT Mail,AccordNewsletterAgence,DateDerniereModification,DerniereModificationPar FROM @dbEnCours
 
   CREATE TABLE #tmp_client(mail char(50));
 
   OPEN c_clientsDbSs;
   FETCH c_clientsDbSs INTO @mail;
 
   WHILE(@@FETCH_STATUS = 0)
	BEGIN
			INSERT INTO #tmp_client(mail) VALUES (@mail);
			FETCH c_clientsDbSs INTO @mail;
	END
 
	CLOSE c_clientsDbSs;
 
	DEALLOCATE c_clientsDbSs;
 
	SELECT #tmp_client.mail FROM #tmp_client;
 
	DROP TABLE #tmp_client;
END
Evidement, il me dit Must declare the table variable "@dbEnCours". J’ai essayé plusieurs syntaxe sans succès. Je trouve rien sur le net par rapport à ça.

D’avance, merci pour vos conseils.
Raphaël.
Raphael1980 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 14h20   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Je ne sais pas ce que tu cherches à faire (et je ne veux pas savoir :-() mais tu dois passer par du SQL dynamique...

stocke le texte de ta requête dans une variable VARCHAR puis fais EXEC(@mavariable)
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h24   #3
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 119
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2008
Messages : 119
Points : 35
Points : 35
Autant pour moi... J'avais fait le test avant de poster mais j'ai du commettre une erreur car je n'avais pas de résultats.

Ici, c'est ok.

Merci
Raphael1980 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web