0

私のSPのパラメータとしてColumn名を渡したいそして私のtat列が最初のテーブル(Batch_Master)に存在する場合、その列から値を取得したい、

そして、その列が 2 番目のテーブル (GTIN_Master) に存在する場合、tat テーブルの列から値をフェッチしたい場合、各テーブルには次のような列があります.. Batch_Master (Batch_M_id、GTIN(主キー)、....etc GTIN_Master (GTIN (外部キー) )、..等)

私はBatch_M_idと列をパラメータとして持っています..

注: ランダムなデータ型を持つ列名、時間 int または時間 datetime など

SPフォローしてみる

CREATE PROCEDURE dbo.StoredProcedure2

    @columnName varchar(50),
    @batchmId  int
AS

if exists(select * from sys.columns 
            where Name = N'columnName' and Object_ID = Object_ID(NBatch_Master'))    

begin

select @columnName from Batch_Master

end


else

begin

 select @columnName 
     from GTIN_Master inner join Batch_Master
     on GTIN_Master.GTIN = Batch_Master.GTIN
     where Batch_M_id =@batchmId


    end
    RETURN
4

3 に答える 3

1

実行しようとしているクエリ構造が正確にわからない場合に必要なものは、実際にはテンプレート クエリの形式である動的クエリを作成する必要があることです。

CREATE PROCEDURE dbo.StoredProcedure2

    @columnName varchar(50),
    @batchmId  int
AS

    DECLARE @SQL1 AS VARCHAR(MAX)
    DECLARE @SQL2 AS VARCHAR(MAX)

    SET @SQL1 = 'select ' + @columnName + ' from Batch_Master'

    SET @SQL1 = 'select ' + @columnName + '
         from GTIN_Master inner join Batch_Master
         on GTIN_Master.GTIN = Batch_Master.GTIN
         where Batch_M_id =' + CONVERT(VARCHAR,@batchmId)

    IF EXISTS(SELECT * FROM sys.columns WHERE Name = @columnName and Object_ID = Object_ID(N'Batch_Master'))
        BEGIN    
            EXEC (@SQL1)
        END
    ELSE
        BEGIN
            EXEC (@SQL2)
        END

上記はあなたが望むことをしますが、エラーが発生しやすいです。たとえば、パラメーターで渡された列が 2 番目のクエリで使用されるテーブルに存在しない場合はどうなるでしょうか。おそらく、2 番目のケースでも存在を確認する必要があります。

于 2013-09-06T07:08:11.447 に答える
0
DECLARE @SQL VARCHAR(MAX)
SET @SQL = 'select ' + @columnName + ' from Batch_Master'

EXECUTE(@SQL)
于 2013-09-06T07:07:44.163 に答える