プロが教える店舗&オフィスのセキュリティ対策術

次の様な動的SQLを作成し、テーブルのコピーを作成しようとしていますが「メッセージ 214、レベル 16、状態 2、プロシージャ sp_executesql、行 1 プロシージャにはデータ型 'ntext/nchar/nvarchar' のパラメータ '@statement' が必要です。」というエラーが出て実行できません。
構文などは間違っていないと思うのですが、よろしくご教授下さい。
■プログラム
DECLARE @SQLString VARCHAR(500)
DECLARE @ParmDefinition VARCHAR(500)
DECLARE @spRet int

set @SQLString= N'SELECT * INTO @tableto FROM @tablefrom'
set @ParmDefinition= N'@tableto VARCHAR(100),@tableto VARCHAR(100)'

EXECUTE @spret=sp_executesql @SQLString,@ParmDefinition,@tableto='コピー元のテーブル名',@tableto='コピー先のテーブル名'

A 回答 (1件)

sp_executesql のSQL文とパラメタ宣言の部分のデータ型は、nvarcharなどのunicode系のデータ型でなければなりません。



>DECLARE @SQLString VARCHAR(500)
>DECLARE @ParmDefinition VARCHAR(500)

↓ 修正要

DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)

また、sp_executesqlの使用方法に、根本的な誤りがあるようです。
パラメタで可変にできるのは、条件式の値部分や受け取り変数の部分だけです。
sp_executesqlは、表名や列名を、可変にする機能ではありません。
    • good
    • 0
この回答へのお礼

chukenkenkouさん返信ありがとうございます。
chukenkenkouさんのおかげで納得いきました。
ありがとうございました。

お礼日時:2007/11/30 10:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!