[解決済み] スカラー変数の宣言が必要
2022-03-01 02:35:41
質問
@RowFrom int
@RowTo int
は両方ともストアドプロシージャのグローバル入力パラメータで、ストアドプロシージャ内のSQLクエリをT-SQLでコンパイルしているので
Exec(@sqlstatement)
をストアドプロシージャの最後に使用して結果を表示しようとすると、このエラーが発生します。
@RowFrom
または
@RowTo
の中に
@sqlstatement
という変数が実行されるのですが、それ以外は正常に動作しています。
"Must declare the scalar variable "@RowFrom"."
また、以下を含めてみたところ
@sqlstatement
変数を使用します。
'Declare @Rt int'
'SET @Rt = ' + @RowTo
しかし
@RowTo
に値を渡さないままです。
@Rt
となり、エラーが発生します。
解決方法は?
intを文字列に連結することはできません。代わりに
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
必要です。
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
ここで何が起こっているかを説明するために ここでは、@RowTo = 5とします。
DECLARE @RowTo int;
SET @RowTo = 5;
DECLARE @sql nvarchar(max);
SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';
EXEC sys.sp_executesql @sql;
これを文字列に組み上げるには(最終的には数字になるとしても)、変換する必要がありますね。しかし、ご覧の通り、実行時にはまだ数字として扱われます。答えは25ですよね?
あなたの場合、連結を使用するよりも、適切なパラメータ化を使用することができ、その習慣が身につけば、いつかはSQLインジェクションに身をさらすことになります( これ と これ :
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;
関連
-
[解決済み】参照するテーブルにプライマリーキーやキャンディデートキーがない
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み】警告。Aqua Data Studioの集約や他のSET操作でNull値が排除される。
-
[解決済み】SQL Serverは「集約関数やサブクエリを含む式に対して集約関数を実行できない」が、Sybaseはできる。
-
[解決済み] エラー (ORA-00923: 期待された場所に FROM キーワードが見つかりませんでした)
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] アクセスクエリーエラー(from句のシンタックスエラー)
-
[解決済み] スカラー変数を宣言する必要があります。
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】INTERSECTとINNER JOINは根本的に違うのか?[重複している]
-
[解決済み】一括読み込みデータ変換エラー(切り捨て)
-
[解決済み] SQLクエリ「00904. 00000 - "%s: 無効な識別子".
-
[解決済み] SQL Server サブクエリが 1 つ以上の値を返しました。これは、サブクエリが =, !=, <, <= , >, >= のように続く場合は許可されません。
-
[解決済み] Presto SQL ピボッティング(言葉は悪いですが)データ
-
[解決済み] 検索エラー ORA-00932: 不整合なデータ型: 期待された DATE は NUMBER になりました。
-
[解決済み] SQLです。最初の出現箇所のみを返す
-
[解決済み] SQLサーバーで文字列をsmalldatetimeデータ型に変換する際、変換に失敗しました(静的値を除く)。
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?
-
[解決済み】SQL Server 2008 Expressで、同じサーバー上のSQL Serverデータベースをクローンするにはどうすればいいですか?