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 07/07/2008, 15h14   #1
Membre confirmé
 
Inscription : janvier 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 554
Points : 263
Points : 263
Par défaut [T-SQL]Comment initialiser une variable dans microsoft sql server management studio ?

Bonjour,

Pour initialiser une variable simple :
Code :
1
2
DECLARE @maVariable varchar(50)
SET @maVariable=('Bonjour')
Pour initialiser une variable multi-valeurs, comment faire ?
Code :
1
2
DECLARE @maVariable varchar(50)
SET @maVariable='Bonjour','Aurevoir'
Ne fonctionne pas.

a+, =)
-=Clement=-
clementratel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2008, 18h37   #2
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 162
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 162
Points : 1 618
Points : 1 618
Bonjour,

Pour initialiser une variable simple :
Code :
1
2
3
 
DECLARE @maVariable varchar(50)
SET @maVariable='Bonjour'
Je n'ai jamais entendu parler de variable multi-valeur.
Tu pourrais utiliser une table pour ca... Ou 2 variables.
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2008, 22h24   #3
Expert Confirmé
 
Avatar de rudib
 
Inscription : mai 2006
Messages : 2 236
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 2 236
Points : 2 983
Points : 2 983
Envoyer un message via ICQ à rudib Envoyer un message via MSN à rudib
Bonjour,

comme dit Clément, les "variables multivaleurs" n'existent pas. Elles n'existent dans aucun langage de programmation. Il existe des tableaux ou des tables de hachage, mais ils ne sont pas disponbiles en T-SQL de SQL Server 2005.
__________________
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation, formation,
solutions MS SQL Server et informatique libre.
MCDBA, MCITP, MCT, SCJP2 - http://www.babaluga.com/
Articles et tutoriels : http://rudi.developpez.com/
LIVRE : Optimiser SQL Server
rudib est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 09h35   #4
Membre confirmé
 
Inscription : janvier 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 554
Points : 263
Points : 263
Bonjour,

1 gage pour l'abus de langage... J'ai utilisé le terme variable multi-valeurs du fait que je voudrais émuler le passage d'un paramètre multi-valeurs par SQL Server Reporting Services, en exécutant la requête dans SQL Server Management Studio.
Pour les paramètres monovaleurs je déclare et initialise une variable @MaVariable que la requête utilise comme si c'était mon paramètre.

Autrement dit, comment émuler un paramètre multivaleurs SSRS dans SSMS ?

a+,=)
-=Clement=-
clementratel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 10h01   #5
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 782
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 782
Points : 1 853
Points : 1 853
Je ne pense pas que ce soit faisable.
En SQL, tu initialiseras une valeur simple qui contiendra toutes tes valeurs séparées par une virgule par exemple.
A ce moment tu l'utilise soit directement dans un IN, soit tu utilises une fonction de découpage.
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 10h49   #6
Membre confirmé
 
Inscription : janvier 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 554
Points : 263
Points : 263
Merci,
Citation:
Envoyé par Jinroh77 Voir le message
Je ne pense pas que ce soit faisable.
En SQL, tu initialiseras une valeur simple qui contiendra toutes tes valeurs séparées par une virgule par exemple.
A ce moment tu l'utilise soit directement dans un IN, soit tu utilises une fonction de découpage.
C'est comme ça que j'ai fais. D'ailleurs, pour ceux qui seraient intéressés, rechercher la fonction fn_MVParam sur internet.
Résolu.

a+, =)
-=Clement=-
clementratel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 11h02   #7
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 782
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 782
Points : 1 853
Points : 1 853
J'avais trouvé "fctSplitToVarChar" pour le découpage.

D'ailleurs si quelqu'un à une idée de la différence de perf (si elle existe) entre ces 2 fonctions ?

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
CREATE FUNCTION fctSplitToVarChar( 
    @DelimitedText VARCHAR(MAX),  -- liste CSV
    @QuoteChar CHAR(1)            -- caractère de délimitation
) RETURNS @Items TABLE (Item VARCHAR(MAX))
BEGIN
 
   DECLARE @Item VARCHAR(15)
   WHILE CHARINDEX(@QuoteChar, @DelimitedText, 0) <> 0 BEGIN
        SELECT @Item=SUBSTRING(@DelimitedText,1,CHARINDEX(@QuoteChar,@DelimitedText, 0)-1), 
               @DelimitedText=SUBSTRING(@DelimitedText,CHARINDEX(@QuoteChar,@DelimitedText, 0) + LEN(@QuoteChar), LEN(@DelimitedText))
        IF LEN(RTRIM(@Item)) > 0
            INSERT INTO @Items SELECT @Item
   END
-- Dernier item de la liste
   IF LEN(RTRIM(@DelimitedText)) > 0
       INSERT INTO @Items SELECT @DelimitedText
   RETURN
END
GO
 
/**********************/
 
CREATE FUNCTION dbo.fn_MVParam
   (@RepParam nvarchar(4000), @Delim char(1)= ',')
RETURNS @VALUES TABLE (Param nvarchar(4000))AS
  BEGIN
  DECLARE @chrind INT
  DECLARE @Piece nvarchar(10)
  SELECT @chrind = 1 
  WHILE @chrind > 0
    BEGIN
      SELECT @chrind = CHARINDEX(@Delim,@RepParam)
      IF @chrind  > 0
        SELECT @Piece = LEFT(@RepParam,@chrind - 1)
      ELSE
        SELECT @Piece = @RepParam
      INSERT  @VALUES(Param) VALUES(Cast(@Piece AS INT))
      SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
      IF LEN(@RepParam) = 0 BREAK
    END
  RETURN
  END
Jinroh77 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 04h00.


 
 
 
 
Partenaires

Hébergement Web