2011-04-14 39 views
2

我有一個表X,其中當某些表發生更改時,觸發器將插入一行。我已經將表名插入到表X中。SQL查詢SELECT FROM [另一個表的列的值]

現在,我想從select得到表X的數據,而inner join與實際的表本身。是否可以通過使用select表的列中的值作爲內部連接的表?

查詢應看起來像這樣

SELECT X.a, Y.b, Y.c FROM X 
INNER JOIN [X.TableName] AS Y ON Y.ID = X.ID 

回答

0

使用動態查詢:

DECLARE @table AS NVARCHAR(128); 
DECLARE @sql NVARCHAR(4000); 

-- of course you'll have to add your WHERE clause here 
SELECT @table = TableName FROM X; 
SET @sql = 'SELECT X.a, Y.b, Y.c FROM X INNER JOIN '[email protected]+' AS Y ON Y.ID = X.ID'; 

EXEC(@sql); 
+0

我想用一排這隻能在表 – Gratzy 2011-04-14 18:48:13

+0

應該使用'quotename' – 2011-04-14 18:49:18

1

不,那是不可能的。您不能直接在查詢中將值用作表名,並且您無法將每個記錄加入到不同的表中。

你將不得不作出加入了一個記錄,並動態地創建查詢使用值表名稱:

declare @name varchar(50) 
set @name = select TableName from X where ID = 42 
exec('select X.a, Y.b, Y.c from X innner join ' + @name + ' as Y on Y.DI = X.ID where X.ID = 42') 
+0

應該使用'quotename' – 2011-04-14 18:47:46

+1

@馬丁:嗯,這是有問題的,如果這個方法應該在所有...數據庫佈局不應該使用」不要強迫你使用動態創建的查詢。 – Guffa 2011-04-14 18:49:55

+1

不知道這是如何回答我的觀點。你提供了答案! – 2011-04-14 18:58:04

3

執行

select 'SELECT X.a, Y.b, Y.c FROM X 
INNER JOIN [' + X.TableName + '] AS Y ON X.ID = Y.ID 
where x.primarykey =' + x.primarykey from x 

將輸出一系列SQL像

SELECT X.a, Y.b, Y.c FROM X 
INNER JOIN [ customer ] AS Y ON X.ID = Y.ID 
where x.primarykey = 1234 

然後你可以執行「sql to build sql」,如果你願意的話。

+0

應該使用'quotename' – 2011-04-14 18:49:00

+0

@Martin可能是的,但它只是一個實用程序查詢 – Gratzy 2011-04-14 19:04:43

+0

第一個查詢是不完整的,並且結果查詢將加入X中的所有記錄,以針對任何記錄中使用的所有表,而不是針對指定的表爲每個記錄。 – Guffa 2011-04-14 19:47:54

相關問題