SQL Server Error Messages - Msg 139¶
Error Message¶
Server: Msg 139, Level 15, State 1, Line 1
Cannot assign a default value to a local variable.
Causes¶
Prior to SQL Server 2008, assigning a default value (or initial value) to a local variable is not allowed; otherwise this error message will be encountered.
This error message can easily be generated using the following DECLARE statement entered in either SQL Server 2000 or SQL Server 2005:
DECLARE @CurrentDate DATETIME = GETDATE()
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Here’s another sample:
DECLARE @Radius FLOAT = 12.5
DECLARE @Diameter FLOAT = PI() * 2 * @Radius
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
One way of knowing if you are connected to SQL Server 2008 is with this error message. If you don’t get this error message when you declare a local variable and assigning it a value, then you are connected to SQL Server 2008. Otherwise, you are connected to either SQL Server 2005 or SQL Server 2000.
Solution / Work Around¶
To avoid this error, simply separate the declaration of the local variable from the assigning of its initial value. In the case of the first example above, the script will look as follows:
DECLARE @CurrentDate DATETIME
SET @CurrentDate = GETDATE()
In the case of the second example, the script will look as follows
DECLARE @Radius FLOAT
DECLARE @Diameter FLOAT
SET @Radius = 12.5
SET @Diameter = PI() * 2 * @Radius
Another way of avoiding this error, which is a little bit a far-fetched solution, is to upgrade to SQL Server 2008. SQL Server 2008 now allows the assigning of a value to a variable in the DECLARE statement.