SQL Server 无法在SQL中将默认值赋给局部变量

svdrlsy4  于 2023-02-11  发布在  其他
关注(0)|答案(4)|浏览(264)

我尝试声明局部变量如下:

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

我得到错误:
无法将默认值赋给局部变量。
根据documentation

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

我做错了什么?

hs1ihplo

hs1ihplo1#

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

wf82jlnq

wf82jlnq2#

您将遇到此错误
无法将默认值赋给局部变量
如果您运行的是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'
kdfy810k

kdfy810k3#

错误
无法将默认值赋给局部变量
如果在将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
wd2eg0qa

wd2eg0qa4#

DECLARE @SomeVariable AS DATETIME
SET @SomeVariable = '2014-11-30';

//Or if some one like to get last affected record id
DECLARE @SomeVariable AS VARCHAR(100);
SET @SomeVariable = (SELECT SCOPE_IDENTITY() AS ID);

相关问题