以下に小さなストアドプロシージャがあります。
テーブル名をストアドプロシージャへの入力パラメーターとして使用しているため、データを一時テーブルに挿入して表示することを計画しています。これは、私のプロジェクトストアドプロシージャの小さなコードブロックです。
以下をコンパイルすると、selectステートメントのパラメーターがテーブル変数と見なされ、エラーがスローされます。
テーブル変数 "@TableName"を宣言する必要があります。
SQL:
CREATE PROCEDURE xyz @TableName Varchar(50)
AS
BEGIN
SELECT TOP 10 * INTO #Temp_Table_One
FROM @TableName
SELECT * FROM #Temp_Table_One
END
CREATE PROCEDURE xyz
@TableName NVARCHAR(128)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'SELECT TOP 10 * INTO #Temp_Table_One
FROM ' + QUOTENAME(@TableName)
+ N' SELECT * FROM #Temp_Table_One '
EXECUTE sp_executesql @Sql
END
sQL動的を使用する
試す
CREATE PROCEDURE xyz @TableName Varchar(50)
AS
BEGIN
DECLARE @query
set @query = 'SELECT TOP 10 * FROM '+ @TableName
EXEC @query
END
スキーマ名を追加します。
例えば:
exec xyz @TableName = 'dbo.mytable'
exec xyz @TableName = 'myschema.mytable'