Reputation: 111
I want to achieve this -
SELECT * FROM A1234
I have the the ID 1234 saved in another table called Aliases which has two columns Alias,ID with one record like this.
Alias = TestTable, ID = 1234
So I am trying something like this
SELECT * FROM ('A'+ (SELECT ID FROM Aliases WHERE Alias = 'TestTable'))
Any help would be appreciated
Upvotes: 5
Views: 22400
Reputation: 280423
You need dynamic SQL for this.
DECLARE @sql NVARCHAR(MAX);
SELECT TOP (1) @sql = N'SELECT * FROM A' + RTRIM(ID) + ';'
FROM dbo.Aliases WHERE Alias = 'TestTable';
EXEC sp_executesql @sql;
To build a set of statements that selects all of them, you can say:
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
SELECT @sql = @sql + N'
SELECT *, ''A' + RTRIM(ID) + ''' FROM A' + RTRIM(ID) + ';'
FROM dbo.Aliases;
PRINT @sql;
-- EXEC sp_executesql @sql;
Upvotes: 5
Reputation: 3108
You should use dynamic sql.
DECLARE @Q VARCHAR(MAX),@ID INT
SET @ID=(Select DISTINCT ID from Aliases where Alias = 'TestTable') -- CHECK TO RETURN JUST ON RESULT
SET @Q='SELECT * FROM A'+CAST(@ID AS VARCHAR(10))
EXEC(@Q)
Upvotes: 5