我尝试声明局部变量如下:
DECLARE @thresholdDate DATETIME = '2014-11-30'
我得到错误:
无法将默认值赋给局部变量。
根据documentation:
DECLARE @find varchar(30);
/* Also allowed:
DECLARE @find varchar(30) = 'Man%';
*/
我做错了什么?
我尝试声明局部变量如下:
DECLARE @thresholdDate DATETIME = '2014-11-30'
我得到错误:
无法将默认值赋给局部变量。
根据documentation:
DECLARE @find varchar(30);
/* Also allowed:
DECLARE @find varchar(30) = 'Man%';
*/
我做错了什么?
4条答案
按热度按时间hs1ihplo1#
在SQL Server 2008之前,不允许为局部变量分配默认值(或初始值);否则将遇到此错误消息。
溶液1:(使用
SET
)有关错误的详细信息:http://www.sql-server-helper.com/error-messages/msg-139.aspx
解决方案2:(升级)
避免此错误的另一种方法是升级到SQL Server 2008,这是一个有点牵强的解决方案。SQL Server 2008现在允许在DECLARE语句中为变量赋值。
wf82jlnq2#
您将遇到此错误
无法将默认值赋给局部变量
如果您运行的是SQL Server 2005或更早版本,并且尝试在一条语句中声明变量并为其赋值。
像是-
消息139,级别15,状态1,行0
无法将默认值赋给局部变量
变量声明在SQL Server 2008和更新版本中得到了增强,我今天在为多个系统部署代码时意识到了这一点。
显然,我们还可以灵活地使用一个Declare语句来声明多个变量-
在SQL Server 2005或更早版本中,需要声明变量,然后使用Set语句为其赋值。
例如-
kdfy810k3#
错误
无法将默认值赋给局部变量
如果在将
default value
赋给local variable
时使用SQL Server 2005,则会发生此情况。对于SQL Server 2005,请使用以下代码:
对于SQL Server 2008及更高版本,您可以改用以下命令:
wd2eg0qa4#