0

出力パラメータを正しく取得できないようです。「TEMPTABLE」を実行している場所は空ですか?

create table TEMPTABLE
(
  Id int identity primary key,
  Name nvarchar(50) not null,
);
GO

insert into TEMPTABLE(Name) values('Name 1');
GO

DECLARE @PARMOUTP nvarchar(50)
DECLARE @ParameterDefinition AS NVARCHAR(2000)
DECLARE @DestTable VARCHAR(50)
declare @sql nvarchar(max)

    set @sql = 'SELECT   OBJECT_NAME(OBJECT_ID) AS TABLENAME 
                FROM     SYS.IDENTITY_COLUMNS  
                WHERE OBJECT_NAME(OBJECT_ID) = @DestTable'

set @DestTable = 'TEMPTABLE'

set @ParameterDefinition = '@DestTable VARCHAR(50), @PARMOUTP VARCHAR(50) OUTPUT'


EXECUTE sp_executesql @sql,
                  @ParameterDefinition,
                  @DestTable,
                  @PARMOUTP OUTPUT

print @PARMOUTP;
print isnull(@PARMOUTP, 'PARMOUTP is null!');

私はここで何が間違っているのですか?

よろしく、

マイク

4

2 に答える 2

2

クエリは、1つのパラメータを持つsp_executesqlには適していません。クエリでは、そのパラメータに値を割り当てて実行する必要があります。このようなもの:

create table TEMPTABLE
(
  Id int identity primary key,
  Name nvarchar(50) not null,
);
GO

insert into TEMPTABLE(Name) values('Name 1');
GO

DECLARE @PARMOUTP nvarchar(50)
DECLARE @ParameterDefinition AS NVARCHAR(2000)
DECLARE @DestTable VARCHAR(50)
declare @sql nvarchar(max)

    set @sql = 'SELECT   @PARMOUTP = OBJECT_NAME(OBJECT_ID) AS TABLENAME 
                FROM     SYS.IDENTITY_COLUMNS  
                WHERE OBJECT_NAME(OBJECT_ID) = @DestTable'

set @DestTable = 'TEMPTABLE'

set @ParameterDefinition = '@DestTable VARCHAR(50), @PARMOUTP VARCHAR(50) OUTPUT'


EXECUTE sp_executesql @sql,
                  @ParameterDefinition,
                  @DestTable,
                  @PARMOUTP OUTPUT

print @PARMOUTP;
print isnull(@PARMOUTP, 'PARMOUTP is null!');

動的クエリからスカラー値を返すことに注意してください。

于 2012-11-08T14:24:58.567 に答える
1

動的SQLステートメントでは、出力パラメーターに値を割り当てることはありません。

結果セットとしてテーブル名を選択していますが、出力変数に格納されることはありません。

これを試して:

set @sql = 'SELECT @PARMOUTP = OBJECT_NAME(OBJECT_ID)
            FROM SYS.IDENTITY_COLUMNS  
            WHERE OBJECT_NAME(OBJECT_ID) = @DestTable'
于 2012-11-08T14:24:00.907 に答える