Передача переменной из запроса SQL - PullRequest
0 голосов
/ 04 февраля 2020

Можно ли передать переменную из запроса SQL? Я строю первоначальный запрос с помощью переменной. Я добавил упрощенное подмножество моего запроса ниже. Спасибо

declare @query Nvarchar(max)
declare @ColumnName Nvarchar(max)
set @ColumnName = 'MyColumn'
SET @query = 'Select ' +  @ColumnName + ' from [MyTable] WHERE [MyCondition]'
EXECUTE sp_executesql @query 

Могу ли я вернуть этот результат как переменную для передачи в другой запрос?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Сохранить результаты в табличной переменной и затем преобразовать ее в XML.

    Declare @xml XML
    declare @query Nvarchar(max)
    declare @ColumnName Nvarchar(max)
    set @ColumnName = 'MyColumn'
    declare @Table as TABLE(
    MyColumn varchar(Max)-- Your Column datatype
    )

    SET @query = 'Select ' +  @ColumnName + ' from [MyTable] WHERE [MyCondition]'

    INSERT INTO @Table
    EXECUTE sp_executesql @query 

    select @xml=MyColumn from @Table for XML PATH('')
0 голосов
/ 04 февраля 2020

Как вы хотите передать возвращаемый результат другому запросу? Что я могу придумать, чтобы создать функцию, вернуть таблицу и вызвать эту функцию для другого запроса:

CREATE FUNCTION test (@id int)
RETURNS @testTable TABLE(id int)  
AS  
begin
insert into  @testTable select id from @your_table where id = @id
return
end

Это вернет таблицу, которую вы можете проверить, используя:

select * from test(2); --will give you a table

Если вы хотите использовать в запросе:

`select * from @second_table where id in (select * from test2(@id parameter))` --- will filter query by id returned by function.
0 голосов
/ 04 февраля 2020

Да. Вы используете выходной параметр:

declare @query Nvarchar(max);
declare @ColumnName Nvarchar(max);
declare @outval <type>;  -- whatever type

set @ColumnName = 'MyColumn'
set @query = 'Select @outval =' +  @ColumnName + ' from [MyTable] where [MyCondition]';

execut sp_executesql @query,
        N'@outval <type> output',
        @outval = @outval output;
...