2014-11-21 2 views
15

Я пытаюсь объявить локальную переменную как:Невозможно присвоить значение по умолчанию для локальной переменной в SQL

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

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

Cannot assign a default value to a local variable.

Как за documentation:

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

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

+4

Это не возможно в '2005' SQL SERVER. Он поддерживается с помощью «SQL SEVER 2008» и выше –

+1

В вашей ссылке на документы используйте раскрывающийся список * Другие версии вверху, чтобы выбрать * SQL 2005 * для правильного синтаксиса. –

ответ

26

До 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: (Upgrade)

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

+0

Вы прочитали вопрос? Я хочу значение по умолчанию (встроенный синтаксис) – Vladimirs

+3

Вы читали ошибку. 'Невозможно присвоить значение по умолчанию локальной переменной.' Это означает, что ваша версия SQL не поддерживает его. Согласно вашей ссылке 'Применяется к: SQL Server (SQL Server 2008 через текущую версию), Azure SQL Database.' – Jaques

+1

Для этого вам нужно купить SQL-сервер 2012 – Veera

2

Ошибка

Cannot assign a default value to a local variable

происходит, если вы используете 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 
+2

'DECLARE @thresholdDate DATETIME = '2014-11-30' 'будет работать в' SQL SERVER 2008' + .. –

2

Вы попали эту ошибку

Cannot assign a default value to a local variable

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

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

DECLARE @Var Varchar(15) = 'Test' 

Message 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable

Переменная декларация была расширена в 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'