2014-11-21 44 views
15

Próbuję zadeklarować zmiennej lokalnej jak:Nie można przypisać domyślną wartość do zmiennej lokalnej w SQL

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

i otrzymuję błąd:

Cannot assign a default value to a local variable.

zgodnie documentation:

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

Co robię źle?

+4

Nie jest to możliwe w 'SQL SERWERZE 2005'. Jest obsługiwany z 'SQL SEVER 2008' i powyżej –

+1

W twoim linku do dokumentów użyj menu rozwijanego * Inne wersje * u góry, aby wybrać * SQL 2005 * dla poprawnej składni. –

Odpowiedz

26

Przed SQL Server 2008, przypisanie wartości domyślnej (lub wartości początkowej) do zmiennej lokalnej nie jest dozwolone; w przeciwnym razie napotkany zostanie ten komunikat o błędzie.

Rozwiązanie 1: (Użyj SET)

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

Aby uzyskać więcej informacji na temat błędu: http://www.sql-server-helper.com/error-messages/msg-139.aspx

Rozwiązanie 2: (Upgrade)

Innym sposobem na uniknięcie ten błąd, który jest trochę trudnym rozwiązaniem, to uaktualnienie do SQL Server 2 008. SQL Server 2008 umożliwia teraz przypisanie wartości do zmiennej w instrukcji DECLARE.

+0

Czy czytasz pytanie? Chcę wartość domyślną (składnia in-line) – Vladimirs

+3

Czy przeczytałeś błąd. 'Nie można przypisać wartości domyślnej do zmiennej lokalnej." Oznacza to, że twoja wersja SQL nie obsługuje go. Według twojego linku 'Dotyczy: SQL Server (SQL Server 2008 do aktualnej wersji), Baza danych SQL Azure. – Jaques

+1

Do tego musisz kupić serwer SQL 2012 – Veera

2

Błąd

Cannot assign a default value to a local variable

występuje, jeśli używasz SQL Server 2005 podczas przypisywania default value do local variable.

Dla SQL Server 2005 użyć tego kodu:

DECLARE @thresholdDate AS DATETIME 

SET @thresholdDate = '2014-11-30' 

SELECT @thresholdDate 

Dla SQL Server 2008 i nowszych można użyć zamiast tego:

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

'DECLARE @thresholdDate DATETIME = '2014-11-30' 'będzie działać w' SQL SERVER 2008' + .. –

2

będzie hit tego błędu

Cannot assign a default value to a local variable

w cas e używasz programu SQL Server 2005 lub wcześniejszego i próbujesz zadeklarować zmienną i przypisać jej wartość w jednej instrukcji.

Coś -

DECLARE @Var Varchar(15) = 'Test' 

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

Zmienna deklaracja została ulepszona w SQL Server 2008 i nowsze wersje, i zdałem sobie sprawę, to dzisiaj, kiedy wdrażania kodu dla wielu systemów.

enter image description here

Najwyraźniej mamy także elastyczność po prostu użyć jednej instrukcji deklarują zadeklarować kilka zmiennych -

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

w SQL Server 2005 lub wcześniej, trzeba będzie zadeklarować zmienną, a następnie przypisać to wartość za pomocą instrukcji Set.

przykład -

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