191

実行する必要がある動的 SQL があり、その結果を変数に格納する必要があります。

使用できることはわかってsp_executesqlいますが、これを行う方法についての明確な例が見つかりません。

4

10 に答える 10

281

OUTPUTパラメータがある場合は、実行できます

DECLARE @retval int   
DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);

DECLARE @tablename nvarchar(50)  
SELECT @tablename = N'products'  

SELECT @sSQL = N'SELECT @retvalOUT = MAX(ID) FROM ' + @tablename;  
SET @ParmDefinition = N'@retvalOUT int OUTPUT';

EXEC sp_executesql @sSQL, @ParmDefinition, @retvalOUT=@retval OUTPUT;

SELECT @retval;

ただし、SP を変更せず、変更できない場合:

-- Assuming that your SP return 1 value
create table #temptable (ID int null)
insert into #temptable exec mysp 'Value1', 'Value2'
select * from #temptable

きれいではありませんが、機能します。

于 2009-04-29T16:40:10.320 に答える
53
DECLARE @vi INT
DECLARE @vQuery NVARCHAR(1000)

SET @vQuery = N'SELECT @vi= COUNT(*) FROM <TableName>'

EXEC SP_EXECUTESQL 
        @Query  = @vQuery
      , @Params = N'@vi INT OUTPUT'
      , @vi = @vi OUTPUT

SELECT @vi
于 2009-10-20T13:35:03.660 に答える
52
DECLARE @tab AS TABLE (col1 VARCHAR(10), col2 varchar(10)) 
INSERT into @tab EXECUTE  sp_executesql N'
SELECT 1 AS col1, 2 AS col2
UNION ALL
SELECT 1 AS col1, 2 AS col2
UNION ALL
SELECT 1 AS col1, 2 AS col2'

SELECT * FROM @tab
于 2011-04-07T08:23:23.657 に答える
2
DECLARE @ValueTable TABLE
    (
    Value VARCHAR (100)
    )

SELECT @sql = N'SELECT SRS_SizeSetDetails.'+@COLUMN_NAME+' FROM SRS_SizeSetDetails WHERE FSizeID = '''+@FSizeID+''' AND SRS_SizeSetID = '''+@SRS_SizeSetID+'''';

INSERT INTO @ValueTable
EXEC sp_executesql @sql;

SET @Value='';

SET @Value = (SELECT TOP 1  Value FROM @ValueTable)

DELETE FROM @ValueTable
于 2015-11-21T11:06:49.477 に答える
0

これはかなり前のことなので、これがまだ必要かどうかはわかりませんが、@@ROWCOUNT 変数を使用して、前の SQL ステートメントで影響を受けた行数を確認できます。

これは、たとえば、動的な Update ステートメントを作成して exec で実行する場合に役立ちます。@@ROWCOUNT は、更新された行数を示します。

ここに定義があります

于 2014-08-29T08:01:55.933 に答える
0

これは私のために働いた:

DECLARE @SQL NVARCHAR(4000)

DECLARE @tbl Table (
    Id int,
    Account varchar(50),
    Amount int
) 

-- Lots of code to Create my dynamic sql statement

insert into @tbl EXEC sp_executesql @SQL

select * from @tbl
于 2018-10-25T21:30:38.273 に答える