我有一個表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
我有一個表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
使用動態查詢:
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);
不,那是不可能的。您不能直接在查詢中將值用作表名,並且您無法將每個記錄加入到不同的表中。
你將不得不作出加入了一個記錄,並動態地創建查詢使用值表名稱:
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')
應該使用'quotename' – 2011-04-14 18:47:46
@馬丁:嗯,這是有問題的,如果這個方法應該在所有...數據庫佈局不應該使用」不要強迫你使用動態創建的查詢。 – Guffa 2011-04-14 18:49:55
不知道這是如何回答我的觀點。你提供了答案! – 2011-04-14 18:58:04
執行
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」,如果你願意的話。
我想用一排這隻能在表 – Gratzy 2011-04-14 18:48:13
應該使用'quotename' – 2011-04-14 18:49:18