【问题标题】:Cannot assign a default value to a local variable in SQL无法为 SQL 中的局部变量分配默认值
【发布时间】:2015-01-19 13:16:36
【问题描述】:

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

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

我收到错误:

无法为局部变量分配默认值。

根据documentation

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

我做错了什么?

【问题讨论】:

  • SQL SERVER 2005 中是不可能的。从SQL SEVER 2008 及以上支持它
  • 在您的文档链接中,使用顶部的 Other Versions 下拉菜单选择 SQL 2005 以获得正确的语法。跨度>

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


【解决方案1】:

你会遇到这个错误

无法为局部变量分配默认值

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

    错误

    无法为局部变量分配默认值

    如果您在将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
    

    【讨论】:

    • DECLARE @thresholdDate DATETIME = '2014-11-30' 将在SQL SERVER 2008+..中工作。
    【解决方案3】:

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

    【讨论】:

    • 你读过一个问题吗?我想要默认值(行内语法)
    • 您是否阅读过错误信息。 Cannot assign a default value to a local variable. 这意味着您的 SQL 版本不支持它。根据你的链接Applies to: SQL Server (SQL Server 2008 through current version), Azure SQL Database.
    • 为此你必须购买 SQL server 2012
    • @Jaques 我有点看到它无法分配,但这仍然不能解释任何事情。提到早期版本不支持这是有道理的。
    • @Veera 给了你正确的答案,因为 SQL Server 2005 不支持该语法糖(内联语法)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多