7

これは間違っていますか? テーブル名を選択クエリに動的に渡すことはできませんか?

これにより、「テーブル変数 @TblName を宣言する必要があります」というエラーが表示されます

DECLARE @TblName VARCHAR(30)
SET @TblName = 'User'
SELECT * 
FROM @TblName
4

3 に答える 3

14

できればQUOTENAME関数を使用して、動的 SQL クエリを作成する必要があります。QUOTENAME関数を使用すると、悪意のある入力による問題を回避できます。

テーブル名を渡して動的 SQL クエリを作成し、テーブルをクエリする方法を示すサンプル スクリプトを次に示します。テーブル名を値で変数に変更できます@tablename

サンプルのスクリプトを作成して挿入します。

CREATE TABLE sample
(
    id INT NOT NULL
);

INSERT INTO sample (id) VALUES
  (1),
  (2),
  (3),
  (4),
  (5),
  (6);

動的 SQL スクリプト:

DECLARE @execquery AS NVARCHAR(MAX)
DECLARE @tablename AS NVARCHAR(128)

SET @tablename = 'sample'
SET @execquery = N'SELECT * FROM ' + QUOTENAME(@tablename)

EXECUTE sp_executesql @execquery

デモ:

SQL Fiddle でデモを表示するには、ここをクリックしてください。

おすすめの読み物:

動的 SQL の呪いと祝福

于 2012-05-09T17:58:10.083 に答える
1

dynamicSQL実行を使用する必要があります

ステートメントをラップします@selectstr

使用するexec sp_executesql @selectstr

于 2012-05-09T17:33:29.253 に答える
0

動的クエリを使用してこれを行うことができます。以下を確認してください

DECLARE @TblName VARCHAR(30)

DECLARE @vQuery NVARCHAR(100)

SET @TblName = 'User'

SET @vQuery = 'SELECT * FROM ' + @TblName

EXECUTE sp_executesql @vQuery
于 2012-05-10T05:12:11.287 に答える