2014-11-21 43 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

它不是在'SQL SERVER 2005'可能的。它支持SQL SEVER 2008和以上版本 – 2014-11-21 11:50:56

+1

在您的文檔鏈接中,使用頂部的* Other Versions *下拉菜單選擇* SQL 2005 *以獲取正確的語法。 – 2014-11-21 11:51:38

回答

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:升級

避免的另一種方式此錯誤有點牽強的解決方案是升級到SQL Server 2 008.現在,SQL Server 2008允許在DECLARE語句中爲變量賦值。

+0

你讀過一個問題嗎?我需要默認值(內嵌語法) – Vladimirs 2014-11-21 11:45:42

+3

您是否閱讀過錯誤。 '不能將默認值分配給本地變量.'這意味着您的SQL版本不支持它。根據你的鏈接'適用於:SQL Server(通過當前版本的SQL Server 2008),Azure SQL數據庫。「# – Jaques 2014-11-21 11:46:47

+1

爲此,你必須購買SQL服務器2012 – Veera 2014-11-21 11:46:53

2

錯誤

Cannot assign a default value to a local variable

如果您正在使用SQL Server 2005中而分配default valuelocal 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' +中工作。 – 2014-11-21 11:48:39

2

你會打這個錯誤

Cannot assign a default value to a local variable

in cas如果您正在運行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'