0

I wrote the following code:

Declare @DaataBaseName2 varchar(50)

set @DaataBaseName2 = 'LUNDB14644A01'  -- @DaataBaseName
USE @DaataBaseName2  --LUNDB14644A01
GO

I received following error:

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '@DaataBaseName2'.

Why?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
user2668842
  • 1
  • 1
  • 1
  • 1
    please provide more information about the language, environment and what you have tried – 23tux Aug 09 '13 at 18:41
  • 4
    Because you **cannot** use a variable in a `USE` command - only literal database names. – marc_s Aug 09 '13 at 18:48
  • possible duplicate of [How to use variable for database name in t-sql](http://stackoverflow.com/questions/727788/how-to-use-variable-for-database-name-in-t-sql) – Martin Smith Aug 09 '13 at 18:50

1 Answers1

3

You will have to execute your code via dynamic SQL. You have to be careful with dynamic sql as it can lead to sql injection attack.

Here is a small scale sample of how to use a dynamic database.

Declare @DaataBaseName2 varchar(50),
        @sql nvarchar(Max)
set @DaataBaseName2 = 'master'  -- @DaataBaseName
set @sql = 'USE ' + @DaataBaseName2 + ';' + CHAR(13)
SET @sql = @sql + 'SELECT db_name()'

exec sp_executesql @sql
GO
Adam Haines
  • 900
  • 5
  • 7