2

リンクサーバーにジョブ番号が存在することを確認し、存在するかどうかを示す変数 (@JobExists) を取得しようとしています (はいの場合は 1、いいえの場合は 0)。

これを行うには、ジョブ番号のパラメーターを渡す必要があるため、sp_executesql と共に OPENQUERY を使用しようとしています。以下のコードを試してみましたが、「プロシージャーはタイプ 'ntext/nchar/nvarchar' のパラメーター '@statement' を予期しています。テスト目的で、変数 @JobNumber を宣言して設定しました。

DECLARE @JobNumber as varchar(50)
SET @JobNumber = '2112111'

DECLARE @JobExists as BIT
DECLARE @JobCount as int
DECLARE @ParmDefinition as varchar(100)
DECLARE @sql as varchar(500)

SET @JobExists = 0
SET @ParmDefinition = N'@Result int output'
SET @sql = 'SELECT @Result = SELECT COUNT(*) FROM OPENQUERY(MYLINKEDSVR,''SELECT JOB_NUMBER FROM PROD.tbl1 WHERE JOB_NUMBER = ''''' + UPPER(RTRIM(LTRIM(@JobNumber))) + ''''''')'

exec sp_executesql @sql, @ParmDefinition, @Result = @JobCount output

IF @JobCount > 0
SET @JobExists = 1

SELECT @JobExists

ここでsp_executesqlを読みました:http://technet.microsoft.com/en-us/library/ms188001.aspx また、さまざまな検索を行いましたが、自分に合った答えに出くわしていません。

足りないものはありますか?

4

1 に答える 1

2

エラー メッセージは明確です。@sql を varchar ではなく nvarchar として宣言する必要があります。@ParamDefinition についても同様です。

DECLARE @ParmDefinition as nvarchar(100)  
DECLARE @sql as nvarchar(500)
于 2014-01-07T09:47:10.380 に答える