2017-08-01 6 views
2

リンクされたデータベースを照会して値を返しますが、大変苦労しているストアプロシージャ(または簡単な場合は関数)を記述しようとしています。各変数を参照してください最後にSELECTステートメントを使用してストアドプロシージャ内のリンクされたデータベースから値を返すことができません

CREATE Proc dbo.Sample (@FolderID as VARCHAR(50), 
@FolderName varchar(50) OUTPUT) 
AS 
BEGIN 

DECLARE @ParamaterDefinition NVARCHAR(500) 
DECLARE @FolderNameRet VARCHAR(50) 
DECLARE @TSQL NVARCHAR(4000) 

SET @TSQL = N'SELECT folder_name FROM OPENQUERY(LINKDB, ''SELECT 
     folder_name 
    FROM FolderTable 
    where folder_id = '+ @FolderID +' and folder_status != 0'')' 
SET @ParamaterDefinition = N'@FolderID as VARCHAR(50), 
        @FolderName VARCHAR(50) OUTPUT' 
EXEC SP_EXECUTE @TSQL, 
@ParamaterDefinition, 
@FolderID, 
@FolderName = @FolderNameRet output 

SELECT @FolderNameRet AS "Output" 
SELECT @FolderID AS "FolderID1" 
SELECT @TSQL AS "Script" 
SELECT @FolderName AS "FolderName1" 
SELECT @ParamaterDefinition AS "Parameters" 

RETURN @FolderNameRet 
END 

を、生成されたスクリプトが細かく、取得するには、別途、これを実行することができます:私が試してみました何任意の助けも大歓迎...

私の希望する価値。しかし、@FolderNameRetはまだNULLになっています。

私は値を間違って返そうとしているように感じますが、私が試した方法はすべて失敗しています。

つまり、OPENQUERYステートメントの一部として実行するには、文字列形式にする必要があるため、動的スクリプト内に戻り値を設定することはできません。また、EXEC @FolderNameRet = SP_EXECUTE @TSQLを使ってみましたが、これもNULLを返しています。

助けてください!あなたは、変数を@FolderNameに値を代入しようとすることができ

答えて

1

:また

SET @TSQL = N'SELECT @FolderName = folder_name FROM OPENQUERY(LINKDB, ''SELECT 
     folder_name 
    FROM FolderTable 
    where folder_id = '+ @FolderID +' and folder_status != 0'')' 
SET @ParamaterDefinition = N'@FolderID as VARCHAR(50), 
        @FolderName VARCHAR(50) OUTPUT'; 

RETURNストアドプロシージャのためには、ステータスINTないVARCHAR(50)ためです。

+1

正確に私が逃していたもの、ありがとう。 'SP_EXECUTE'を' SP_EXECUTESQL'に変更する必要もあります。 –

関連する問題