web-dev-qa-db-fra.com

Impossible d'attribuer une valeur par défaut à une variable locale dans SQL

J'essaie de déclarer une variable locale comme:

DECLARE @thresholdDate DATETIME = '2014-11-30'

Et je reçois une erreur:

Impossible d'attribuer une valeur par défaut à une variable locale.

Selon documentation :

DECLARE @find varchar(30); 
/* Also allowed: 
DECLARE @find varchar(30) = 'Man%'; 
*/

Qu'est ce que je fais mal?

18
Vladimirs

Avant SQL Server 2008, l'attribution d'une valeur par défaut (ou valeur initiale) à une variable locale n'est pas autorisée; sinon, ce message d'erreur sera rencontré.

Solution 1: (Utilisez SET)

DECLARE @thresholdDate DATETIME 
set @thresholdDate = '2014-11-30'

Pour plus de détails sur l'erreur: http://www.sql-server-helper.com/error-messages/msg-139.aspx

Solution 2: ( Mise à niveau )

Une autre façon d'éviter cette erreur, qui est un peu une solution farfelue, est de mettre à niveau vers SQL Server 2008. SQL Server 2008 permet désormais l'attribution d'une valeur à une variable dans l'instruction DECLARE.

33
Veera

Vous rencontrerez cette erreur

Impossible d'attribuer une valeur par défaut à une variable locale

si vous exécutez SQL Server 2005 ou une version antérieure, et que vous essayez de déclarer une variable et de lui affecter une valeur dans une instruction.

Quelque chose comme -

DECLARE @Var Varchar(15) = 'Test'

Message 139, niveau 15, état 1, ligne 0
Impossible d'attribuer une valeur par défaut à une variable locale

La déclaration de variable a été améliorée dans SQL Server 2008 et les versions plus récentes, et je l'ai réalisé aujourd'hui lorsque je déployais un code pour plusieurs systèmes.

enter image description here

Apparemment, nous avons également la possibilité d'utiliser une seule instruction Declare pour déclarer plusieurs variables -

DECLARE @Var Varchar(15) = 'Test',
        @Char Varchar(10) = 'Test2',
        @Char2 Varchar(10) = 'Test3'

Dans SQL Server 2005 ou version antérieure, vous devrez déclarer la variable, puis lui affecter une valeur à l'aide de l'instruction Set.

Exemple -

DECLARE @Var Varchar(15) 
SET @Var = 'Test'
3
CODeeerrrrrrrr

L'erreur

Impossible d'attribuer une valeur par défaut à une variable locale

se produit si vous utilisez SQL Server 2005 lors de l'attribution de default value à local variable.

Pour SQL Server 2005 utilisez ce code:

DECLARE @thresholdDate AS DATETIME 

SET @thresholdDate = '2014-11-30'

SELECT @thresholdDate

Pour SQL Server 2008 et plus récent vous pouvez utiliser ceci à la place:

DECLARE @thresholdDate DATETIME = '2014-11-30'
SELECT @thresholdDate
2
Saravana Kumar