これは間違っていますか? テーブル名を選択クエリに動的に渡すことはできませんか?
これにより、「テーブル変数 @TblName を宣言する必要があります」というエラーが表示されます
DECLARE @TblName VARCHAR(30)
SET @TblName = 'User'
SELECT *
FROM @TblName
これは間違っていますか? テーブル名を選択クエリに動的に渡すことはできませんか?
これにより、「テーブル変数 @TblName を宣言する必要があります」というエラーが表示されます
DECLARE @TblName VARCHAR(30)
SET @TblName = 'User'
SELECT *
FROM @TblName
できればQUOTENAME関数を使用して、動的 SQL クエリを作成する必要があります。QUOTENAME関数を使用すると、悪意のある入力による問題を回避できます。
テーブル名を渡して動的 SQL クエリを作成し、テーブルをクエリする方法を示すサンプル スクリプトを次に示します。テーブル名を値で変数に変更できます@tablename
。
CREATE TABLE sample
(
id INT NOT NULL
);
INSERT INTO sample (id) VALUES
(1),
(2),
(3),
(4),
(5),
(6);
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 でデモを表示するには、ここをクリックしてください。
dynamic
SQL実行を使用する必要があります
ステートメントをラップします@selectstr
使用するexec sp_executesql @selectstr
動的クエリを使用してこれを行うことができます。以下を確認してください
DECLARE @TblName VARCHAR(30)
DECLARE @vQuery NVARCHAR(100)
SET @TblName = 'User'
SET @vQuery = 'SELECT * FROM ' + @TblName
EXECUTE sp_executesql @vQuery