2014-11-21 44 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'