2015-05-15 78 views
0

在我的SQL數據庫中,我想製作一個通用軟鏈接表。也許類似以下內容:SQL列值到表名

create table soft_link(
    id uniqueidentifier, 
    name varchar(255), 
    LINK uniqueidentifier, 
    TABLE varchar(255), 
    primary key(id)); 

假設我在數據庫的其他表中有對象「b_object」。 LINK列將是b_object的唯一標識符,而TABLE將是b_object存儲在數據庫中的表。

現在我想製作一個存儲過程「sp_ResolveSoftLink」。此方法將採用軟鏈接的標識,查找軟鏈接的LINK和TABLE列,然後使用TABLE和LINK查詢b_object。

以下是不正確的SQL語法,但希望它有助於說明我的問題。我想這兩個查詢合併成一個單一的存儲過程,並返回第二個查詢的結果:

select LINK, TABLE from soft_link where id = xxxxxx 
select * from TABLE where id = LINK 
-- return the result of the second select query 

基本的問題:我如何/可使用從一個查詢將varchar回報,從而在另一個查詢SQL中的相同存儲過程?

+1

這就是所謂的動態SQL。您需要將SQL查詢構建爲字符串,然後執行它。確切的語法取決於數據庫。 –

回答

0

您可以像這樣創建一個存儲過程。

在這裏,首先,你必須存儲在變量LINK和表2的值,然後使用這些變量來形成另一個動態查詢

CREATE PROC spName 
@id INT 
AS 
BEGIN 
    Declare @LINKValue uniqueidentifier, @TABLE varchar(255),@SQL varchar(max) 

    SELECT @LINKValue = LINK , @TABLE = TABLE 
    FROM soft_link 
    WHERE soft_link id = @id 

    SET @SQL='SELECT * FROM'; 
    SET @SQL = @SQL +' ' + @TABLE 
    SET @SQL = @SQL +' ' + 'WHERE ID =' +' ' + @LINKValue 

    PRINT @SQL -- SEE Here This is what you actually Want 
    --EXEC (@SQL) --Then Execute this 

END