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

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

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

и я получаю ошибку:

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

по состоянию на документация:

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

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

3 ответов


до 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.


ошибка

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

возникает, если вы используете SQL Server 2005 при назначении default value to 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

вы нажмете эту ошибку

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

в случае, если вы используете 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'