2015-05-15 21 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