Невозможно присвоить значение по умолчанию локальной переменной в SQL

Я пытаюсь объявить локальную переменную как:

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

И я получаю сообщение об ошибке:

Невозможно присвоить значение по умолчанию локальной переменной.

Согласно документации:

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

Что я делаю неправильно?

Ответ 1

До SQL Server 2008 присвоение значения по умолчанию (или начального значения) локальной переменной недопустимо; в противном случае это сообщение об ошибке будет встречено.

Решение 1: (используйте SET)

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

Подробнее об ошибке: http://www.sql-server-helper.com/error-messages/msg-139.aspx

Решение 2: (Обновление)

Другим способом избежать этой ошибки, которая является немного надуманным решением, является обновление до SQL Server 2008. Теперь SQL Server 2008 позволяет присваивать значение переменной в инструкции DECLARE.

Ответ 2

Ошибка

Невозможно присвоить значение по умолчанию локальной переменной

возникает, если вы используете SQL Server 2005 при назначении default value на local variable.

Для SQL Server 2005 используйте этот код:

DECLARE @thresholdDate AS DATETIME 

SET @thresholdDate = '2014-11-30'

SELECT @thresholdDate

Для SQL Server 2008 и более новых вы можете использовать это вместо:

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

Ответ 3

Вы попадете в эту ошибку

Невозможно присвоить значение по умолчанию локальной переменной

если вы используете SQL Server 2005 или ранее, и пытаетесь объявить переменную и присвоить ей значение в одном выражении.

Что-то вроде -

DECLARE @Var Varchar(15) = 'Test'

Сообщение 139, уровень 15, состояние 1, строка 0
Невозможно присвоить значение по умолчанию локальной переменной

Объявление переменной было расширено в SQL Server 2008 и более поздних версиях, и я понял это сегодня, когда я развертывал код для нескольких систем.

enter image description here

По-видимому, у нас также есть гибкость, чтобы просто использовать один оператор Declare для объявления нескольких переменных -

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

В SQL Server 2005 или ранее вам нужно будет объявить переменную, а затем присвоить ей значение с помощью оператора Set.

Пример -

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