无法在SQL中为本地变量分配默认值

时间:2014-11-21 11:42:12

标签: sql sql-server sql-server-2005 default-value declare

我正在尝试声明局部变量,如:

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

我收到了错误:

  

无法为本地变量指定默认值。

根据documentation

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

我做错了什么?

3 个答案:

答案 0 :(得分:33)

在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语句中为变量赋值。

答案 1 :(得分:3)

您将遇到此错误

  

无法为本地变量

指定默认值

如果您运行的是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'

答案 2 :(得分:2)

错误

  

无法为本地变量

指定默认值
如果您在将default value分配给local variable时使用 SQL Server 2005 ,则会出现

对于 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