2015-05-15 3 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 и таблицы в переменной, а затем использовать эти переменные, чтобы сформировать другой динамический запрос

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 
Смежные вопросы