2015-11-16 2 views
0

У меня есть хранимая процедура со следующим динамическим запросомПрисвоить динамический OpenQuery переменного в SQL Server

ALTER PROCEDURE [dbo].[Del_AE_Update] 
     @uid nvarchar(MAX) 
AS 
BEGIN 
    Declare @AEname varchar(MAX); 
    Declare @sqlquery varchar(MAX); 

    Set @sqlquery = ('Select name FROM OPENQUERY(CRM_MYSQL,''Select name From tscrm_prod.user_info where uid='[email protected]+''')') 

    Select @sqlquery 
END 

Однако я получаю значение имени. Я хочу, чтобы он был назначен @sqlquery, потому что мне нужно использовать его в следующей части процедуры.

Вот как выглядят мои результаты.

name= Dallas-BDD 

@sqlquery = 'Select name FROM OPENQUERY... 
+0

Так что следующий шаг будет запустить OPENQUERY. –

+0

Да, мне нужно знать, как это сделать. Я совершенно не знаю, как это синтаксически. –

ответ

1

Вы должны выполнить строку запроса (@sqlquery), чтобы иметь возможность получить значение вашего запроса. Чтобы иметь возможность получить результат динамического запроса в переменную, вам нужно использовать sp_executesql с одним входным и одним выходным параметрами.

В Интернете представлено так много примеров.

это будет выглядеть примерно так: (Это упрощенная версия, чтобы дать вам идею)

DECLARE @ParmDefinition nvarchar(500); 
Declare @sqlquery nvarchar(4000); 
Declare @name varchar(100); 

Set @sqlquery =('Select @name= UserName From tmp_users where [email protected]') 

    SET @ParmDefinition = N'@uid varchar(max), 
     @name nvarchar(25) OUTPUT'; 
    EXECUTE sp_executesql 
     @sqlquery 
     ,@ParmDefinition 
     ,@uid = 1 
     ,@name = @name OUTPUT; 
Select @name -- which you will be able to use to continue in your SP 
+0

В процедуре или функции указано слишком много аргументов. –

+0

@Urwish Patel, на что я положил, нужно работать. Это было просто дать вам толчок в правильном направлении. check [sp_executesql] (https://msdn.microsoft.com/en-us/library/ms188001.aspx) – JohnG

+0

Я понимаю это, но я использую это в первый раз. И синтаксически не представляете, как это сделать. Застрял на нем в течение 2 дней. –