7

I'm trying to execute next SQL statement (SQL Server 2008 Profile)

DECLARE @fun int;
SET @fun = 40;

select cast(@fun as varchar(10)) + 'hello'

and SQLFiddle gives me the error: Must declare the scalar variable @fun

Where I'm wrong?

enter image description here

http://sqlfiddle.com/#!3/d41d8/42156

Andrey Morozov
  • 7,839
  • 5
  • 53
  • 75

3 Answers3

10

You need to select the [Go] from last dropdown.

enter image description here

Dai
  • 141,631
  • 28
  • 261
  • 374
Ashish Bisht
  • 292
  • 1
  • 10
3

I think the semicolons are introducing the problem here.

As described here: http://www.sql-server-helper.com/error-messages/msg-137.aspx and here: SQL Server - Variable declared but still says "Must declare the scalar variable", the problem arises when the statements are executed individually instead of as a “unit”, and the semicolons seem to trigger that.

When I remove the semicolons from your statement, it works: http://sqlfiddle.com/#!3/d41d8/42159

Community
  • 1
  • 1
CBroe
  • 91,630
  • 14
  • 92
  • 150
  • While this works in this simple case, it is [not exactly a best practice](https://sqlblog.org/blogs/aaron_bertrand/archive/2009/09/03/ladies-and-gentlemen-start-your-semi-colons.aspx), and will break when the OP uses a query construct that actually requires semi-colons. – Aaron Bertrand Jul 17 '15 at 21:16
0

You dont have to remove the semicolons, the important part is select [GO] as query terminator on the bottom right conner dropdown.

FIDDLE DEMO

DECLARE @fun int;
SET @fun = 40;
select @fun;
GO

select 10;
GO

select @fun + 10;

The first three sentences are executed as a whole because now ; doesnt end the query. So @fun is visible on that scope.

Second block take notice you need leave a space after GO.

Third block wont work because @fun isn't define in this block.

Juan Carlos Oropeza
  • 47,252
  • 12
  • 78
  • 118