私はこの問題に関してあなたの助けを求めたいと思います。どのようにOUTPUTパラメータを使用してストアドプロシージャの結果を取得する
私のテーブルの1つの列を更新する変数が必要です。
私が遭遇した最初の問題は、これらの列が数値かどうかをチェックして、一連の列からデータを取得する必要があることです。
これを解決するために、私はTSQLを使いました。今ここで私は窮地に瀕しているようです。この手順の結果を取得する必要があります。私はそれを関数に変換しようとしましたが、多くの試行(およびいくつかのGoogle検索)によるとTSQLは関数hereのように使用できないようですので、ストアドプロシージャに固執しますが、結果をどのように取得しますか?私は、出力パラメータを使用しようとしましたが、私はこのエラーで打撃を受ける
The formal parameter "@R" was not declared as an OUTPUT parameter, but the actual parameter passed in requested output.
私は、出力パラメータとしてR
を宣言したにもかかわらず、私はまた私のsp_executesql
トランザクションで結果を出力する@R
を宣言したが、私はまだエラーが出ます何が間違っているのか尋ねてもいいですか?
ストアドプロシージャは正常に動作しています。出力が必要です。ありがとうございました。 docs 1として
ALTER procedure [dbo].[SaveRinHead]
@SumNo as nvarchar(15)
,@R as decimal(18,3) output
as
declare @cursor CURSOR
declare @colname as integer
declare @top as integer
declare @query as nvarchar(MAX)
declare @TSQL as nvarchar(MAX)
declare @topass as nvarchar(MAX) = ''
declare @DimItem as nvarchar(10)
set @DimItem = (select distinct dimitem from SumNo)
SET @cursor = CURSOR FOR
(select cast([Name] as decimal(18,0)) from sys.columns where object_id in (select object_id from sys.tables where [name] = 'ADetails')and [Name] in ('1','2','3','4','5','6','7','8','9','10'))order by [Name] asc
OPEN @cursor
FETCH NEXT
FROM @cursor INTO @colname
WHILE @@FETCH_STATUS = 0
BEGIN
set @top = (select CASE WHEN Isnumeric(@colname) = 1
THEN CONVERT(int,@colname)
ELSE 0 END AS COLUMNA)
if @top <= '5'
BEGIN
set @query = '(['+cast(@top as nvarchar(10)) + ']) ,'
set @topass = rtrim(ltrim(@topass)) +' '+rtrim(ltrim(@query))
END
FETCH NEXT
FROM @cursor INTO @colName
END
CLOSE @cursor
DEALLOCATE @cursor
set @topass = (SELECT SUBSTRING(@topass,1, len(@topass)-1))
begin
set @TSQL = '
SELECT @R = (MAX(MaxValue) - MIN(MinValue)) FROM ADetails
CROSS APPLY (SELECT MIN(d) MinValue FROM (VALUES '[email protected]+') AS a(d)) X
CROSS APPLY (SELECT MAX(d) MaxValue FROM (VALUES '[email protected]+') AS a(d)) Y
where SumNo= @SumNo'
exec sp_executesql @TSQL, N'@DimItem nvarchar(10), @R decimal(18,3), @SumNo nvarchar(15)', @DimItem, @R output, @SumNo
update ADetails set R = @R where SumNo= @SumNo
end
Oは、ありがとうございました!私はまだ答えを探しています、ありがとう! –