我正在尝试声明局部变量,如:
DECLARE @thresholdDate DATETIME = '2014-11-30'
我收到了错误:
无法为本地变量指定默认值。
DECLARE @find varchar(30);
/* Also allowed:
DECLARE @find varchar(30) = 'Man%';
*/
我做错了什么?
答案 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和更新版本中的变量声明已得到增强,今天我在为多个系统部署代码时意识到了这一点。
显然,我们也可以灵活地使用一个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