いくつかの行と列を持つ2つのテーブルを作成しています。テーブル名を動的に取得して結果を生成するストアドプロシージャを作成しました。SQL Server 2012のストアドプロシージャでテーブル名を動的に与える方法
しかし、私はテーブル名を動的にパースすると、うまくいきません。ここ
CREATE PROC spGetAll (@tableName varchar(50))
AS
BEGIN
SELECT
*
FROM @tableName
END
いくつかの行と列を持つ2つのテーブルを作成しています。テーブル名を動的に取得して結果を生成するストアドプロシージャを作成しました。SQL Server 2012のストアドプロシージャでテーブル名を動的に与える方法
しかし、私はテーブル名を動的にパースすると、うまくいきません。ここ
CREATE PROC spGetAll (@tableName varchar(50))
AS
BEGIN
SELECT
*
FROM @tableName
END
動的SQLを使用してください。例:
CREATE PROC spGetAll (
@tableName SYSNAME)
AS
BEGIN
DECLARE @sql nvarchar(max)
IF EXISTS (SELECT name FROM sys.objects WHERE name = @tableName)
SET @sql = 'SELECT * FROM test.'+ QUOTENAME(@tableName)
EXEC(@sql) -- Or EXEC sp_executesql @sql
END
一つの方法です。 。
IF @tableName = 't111'
SELECT * FROM t111
ELSE
SELECT * FROM t222
「それでは」とはどういう意味ですか? –
オブジェクト識別子に変数を使用することはできません。クエリを動的に構築し、 'sp_executesql'を介してそれを実行する必要があります。いくつかの研究を行うには、これを達成するためにSOのソリューションのshitloadがあります。 – Pred
一般的に、複数のテーブルを同じように扱いたい場合は、データモデルが壊れているという兆候です。同じ「タイプ」のデータが含まれている場合、そのデータを*単一テーブルに格納する必要があります。現在無視されている(またはメタデータとしてのみモデル化されている)*データ*を格納する追加の列は、データを格納するテーブルを決定します。 'MaleEmployees'と' FemaleEmployees'を別々のテーブルとしてモデル化しません。 –