IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Must declare the scalar variable " ". la variable est déjà crée


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    test
    Inscrit en
    mai 2016
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : test
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : mai 2016
    Messages : 337
    Points : 121
    Points
    121
    Par défaut Must declare the scalar variable " ". la variable est déjà crée
    Bonjour a tous ,

    j'ai une erreur pendant l'exécution de ma proc comme quoi je doit déclarer mon variable alors que cette dernière variable est bien déclaré

    Quelqu'un qui peut m'aider SVP

    Syntaxe du proc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
     
    USE [Test]
    GO
     
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER   PROCEDURE [dbo].[ADMIN_D]  @LNK_Name nvarchar(60) ,@bdd  varchar(50) ,@PS VARCHAR(80), @SCH SYSNAME = 'dbo'
    AS
     
     
    	Declare @sqlm varchar(max)
    	Declare @sql1 nvarchar(max)
    	Declare @sql nvarchar(max)
    	Declare @sqlZ varchar(max)
     
    	Declare @LINK nvarchar(max)
    	Declare @LINK1  nvarchar(max)
    	Declare @LINK2  varchar(max)
    	--Declare @bdd varchar(35)
    	Declare @Login		varchar(80)
    	Declare @Datetime	datetime
    	SET NOCOUNT ON;
     
    	IF (ORIGINAL_LOGIN() IN (''))
    	BEGIN;
    		PRINT 'Déploiement interdit - Contactez l''équipe SQL ';
    		RETURN;
    	END;
     
    	SET @Datetime = Getdate()
    	SET @Login = system_user
     
    	SELECT @sql = Definition
    	FROM sys.procedures p
    		INNER JOIN sys.sql_modules m ON p.object_id = m.object_id
    	where name = @PS and p.schema_id = SCHEMA_ID(@SCH)
     
    	--BEGIN DISTRIBUTED TRAN
     
    	raiserror('--- Alim Z_CODESOURCE de Prod',0,1) WITH NOWAIT
    	SET @sqlZ = 'EXEC dbo.Z_CODESOURCE_Alim @NOM_OBJET = ''' + @PS + ''''
            SET @LINK = N'EXEC (@sqlZ) AT ' + QUOTENAME(@LNK_Name);;
            EXEC sp_executesql @LINK;
    	SET NOCOUNT OFF
     
     
    	IF EXISTS (SELECT TOP 1 1 FROM ADMIN_DEPLOY_BLOCK WHERE NOM_PS = @PS AND Nom_Schema = @SCH)
    	BEGIN
    		SELECT	'DEPLOIEMENT INTERDIT PAR ' + ACTEUR + '. RAISON: ' + RAISON
    			FROM ADMIN_DEPLOY_BLOCK 
    			WHERE NOM_PS = @PS
    				AND Nom_Schema = @SCH;
     
    		PRINT 'Pas de déploiement !'
    	END	
    	ELSE
    		BEGIN TRY
     
    				SET @sqlm = ' USE [' + @bdd + '];DELETE FROM METADATA WHERE NAME = '''+@PS+''''
    				SET @LINK = N'EXEC (@sqlm) AT ' + QUOTENAME(@LNK_Name);
                                    EXEC sp_executesql @LINK ;
     
     
    				SET @sql1 = 'IF EXISTS (SELECT * FROM sys.objects WHERE type IN (''P'', ''FN'') AND name = '''+@PS+''' AND schema_id = ( select schema_id from sys.schemas WHERE name=''' + @SCH + ''' )) DROP PROCEDURE ' + @SCH +  '.' + @PS
    				SET @sql1 = 'IF EXISTS (SELECT * FROM sys.objects WHERE type IN (''P'', ''FN'') AND name = '''+@PS+''') DROP PROCEDURE '+@PS
    				SET @sql1 = REPLACE(@sql1,'''','''''')
    				SET @sql1 = 'USE [' + @bdd + ']; EXEC(''' + @sql1 + ''')'
    				SET @LINK1 = N'EXEC (@sql1) AT ' + QUOTENAME(@LNK_Name) ;
                                    EXEC sp_executesql @LINK1 ;
     
     
    				SET @sql = REPLACE(@sql,'''','''''')
    				SET @sql = 'USE [' + @bdd + ']; EXEC(''' + @sql + ''')'
    				SET @LINK2 = N'EXEC (@sql) AT ' + QUOTENAME(@LNK_Name) ;
                                    EXEC sp_executesql @LINK2 ;
     
    				INSERT INTO LOG_DEPLOYPS (LOGIN, PS, DAT) values (@login, @PS, @datetime)
     
    				Print ''
    				Print ''
    				Print 'Déploiement effectuée avec succès'
    				--COMMIT TRAN
    		END TRY
    		BEGIN CATCH
    				Print ''
    				Print ''
    			Print 'Une erreur est survenue: ' + CAST(@@ERROR AS VARCHAR(255))
     
    			SELECT
    			@PS AS ProcedureName
    			,ERROR_NUMBER() AS ErrorNumber
    			,ERROR_SEVERITY() AS ErrorSeverity
    			,ERROR_STATE() AS ErrorState
    			,ERROR_PROCEDURE() AS ErrorProcedure
    			,ERROR_LINE() AS ErrorLine
    			,ERROR_MESSAGE() AS ErrorMessage;
     
    			--ROLLBACK TRAN
     
    		END CATCH
     
    END
    Syntaxe D'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    USE [Test]
    GO
    DECLARE	@return_value int
     
    EXEC	@return_value = [dbo].[ADMIN_D]
    		@bdd = N'PROD',
    		@PS = N'SP_login',
    		@LNK_Name=N'uat-link'
     
    SELECT	'Return Value' = @return_value
    GO
    merci pour vos aides
    Images attachées Images attachées  

  2. #2
    Membre actif
    Homme Profil pro
    db@
    Inscrit en
    septembre 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : septembre 2021
    Messages : 92
    Points : 214
    Points
    214
    Par défaut
    Ton problème est en dans le sp_executesql car la variable n'y est pas déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @LINK = N'EXEC (@sqlZ) AT ' + QUOTENAME(@LNK_Name);;
    EXEC sp_executesql @LINK;
    Il faut plutôt passer le CONTENU de @sqlZ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @LINK = N'EXEC ('''+@sqlZ+''') AT ' + QUOTENAME(@LNK_Name);

Discussions similaires

  1. error "must declare the scalar variable "@codemodule"
    Par AngeAbstraction dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/04/2012, 20h34
  2. Erreur "Must declare the scalar variable "@id"
    Par Devlin111 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 15/03/2012, 12h26
  3. Réponses: 1
    Dernier message: 20/05/2009, 13h50
  4. Must Declare the scalare variable - Transact SQL
    Par xav13fr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/07/2008, 10h41
  5. [sql server 2005] must declare the scalar variable @ ?
    Par sun19 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 30/04/2008, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo