0

パラメータとして sp_execute に渡すと、サーバー名が見つかりません (サーバーをリンク サーバーとして追加しました)。ハードコーディングされたサーバー名を渡すと実行されます。

SET @PARMDEFINITION =N'@SOURCE_SERVER_NAME_IN VARCHAR(100), @SOURCE_DB_NAME_IN VARCHAR(100) ,@DESTI_SERVER_NAME_IN VARCHAR(100), @DESTI_DB_NAME_IN VARCHAR(100),
                       @DESTI_STUDENT_COUNT_OUT INT OUTPUT,@SOURCE_STUDENT_COUNT_OUT INT OUTPUT';


SET @SQLSTRING='SELECT @SOURCE_STUDENT_COUNT_OUT=COUNT(*) FROM [@SOURCE_SERVER_NAME_IN].[@SOURCE_DB_NAME_IN].DBO.STUDENT_MST WHERE CONVERT(FLOAT, RANK) <> 0 AND PAID2 =''S'''                 

EXECUTE SP_EXECUTESQL @SQLSTRING,@PARMDEFINITION,@SOURCE_SERVER_NAME_IN=@SOURCE_SERVER_NAME,@DESTI_SERVER_NAME_IN=@DESTI_SERVER_NAME,
@SOURCE_DB_NAME_IN=@SOURCE_DB_NAME,@DESTI_DB_NAME_IN=@DESTI_DB_NAME ,
@SOURCE_STUDENT_COUNT_OUT=@SOURCE_STUDENT_COUNT OUTPUT,@DESTI_STUDENT_COUNT_OUT=@DESTI_STUDENT_COUNT OUTPUT; 

sys.servers にサーバー '+@servername + ' が見つかりませんでした

お知らせ下さい。

4

1 に答える 1

2

サーバー名またはテーブル名をパラメーターとしてに渡すことはできませんsp_executesql

あなたはこのようにする必要があります

SET @SQLSTRING='SELECT @SOURCE_STUDENT_COUNT_OUT=COUNT(*) FROM '
    + quotename(@SOURCE_SERVER_NAME_IN) + '.'
    + quotename(@SOURCE_DB_NAME_IN) 
    + '.DBO.STUDENT_MST WHERE CONVERT(FLOAT, RANK) <> 0 AND PAID2 =''S'''                  
于 2012-09-18T12:24:14.853 に答える