パラメータとして@FirmIdを使用するストアドプロシージャを書きたいと思います。このパラメータに従って関連するテーブルを使用します。パラメータに応じて異なるテーブルを返すストアドプロシージャ
は私が(私は使用しない)を取得したいと、そのようなものです:
CREATE PROCEDURE spFirmDetailGetByFirmId
@FirmId AS INT
AS
BEGIN
IF @FirmId = 1
SELECT * FROM Firm1
ELSE IF @FirmId = 2
SELECT * FROM Firm2
.
.
.
.
ELSE IF @FirmId = 1000
SELECT * FROM Firm1000
END
そしてまた私は、そのようなことを、クエリ文字列を作成し、それをEXECする必要はありません休止中のコードブロックで実際のクエリは複雑すぎるため、このオプションを使用すると管理が非常に難しくなります。
CREATE PROCEDURE spFirmDetailGetByFirmId
@FirmId AS INT
AS
BEGIN
DECLARE @Query AS NVARCHAR(MAX) = 'SELECT * FROM Firm'
SET @Query = @Query + CAST(@FirmId AS NVARCHAR(10))
EXEC(@Query)
END
その他のオプションはありますか?おかげさまで
他のオプションはありませんが、テーブルが同じでも数字の場合は、番号を識別子として1つのテーブルにすべて入れることがあります。それに失敗すると、ダイナミックSQLはあなたの最良の選択肢と思われます。 – ZLK
唯一の選択肢は、テーブルを再設計して 'FirmId'カラムを持つ' firm'テーブルが1つしかないようにすることです。 – Blorgbeard
@Blorgbeard私はデザインが悪いと知っていますが、残念ながらdbは私のコントロール下にありません。それは別の会社によって設計されているので、私はこのように私のレポート画面に使う必要があります。 – GorkemHalulu