I wish to create backup SQL tables using variable names.

something like

DECLARE @SQLTable Varchar(20) 
SET @SQLTable = 'SomeTableName' + ' ' + '20100526' 
SELECT * INTO quotename(@SQLTable)
 FROM SomeTableName

but i am getting

Incorrect syntax near '@SQLTable'.

It is simply a part of a little script for maintence and so i don't need to bother about injections.

Regrettably, you cannot use bind variables for table names, column names, etc. Within this situation you have to generate dynamic SQL and employ exec.

DECLARE @Script NVARCHAR(MAX);
SET @Script = N'SELECT * INTO SomeTableName_' + N'20100526' + N' FROM SomeTableName';
EXEC sp_executesql @Script

I have left the date separate when i assume you need to calculate it for each run.

DECLARE @MyTableName nvarchar(20);
DECLARE @DynamicSQL nvarchar(1000);

SET @MyTableName = "FooTable";


SET @DynamicSQL = N'SELECT * INTO ' + @MyTableName + ' FROM BarTable';

exec @DynamicSQL;

You need to consider using synonyms:

-- Produce a synonym for that Product table in AdventureWorks2008R2. CREATE SYNONYM MyProduct FOR AdventureWorks2008R2.Production.Product GO

-- Query the merchandise table using the synonym. USE tempdb GO Choose ProductID, Title FROM MyProduct WHERE ProductID < 5 GO

http://msdn.microsoft.com/en-us/library/ms177544.aspx