簡體   English   中英

如何將SELECT語句作為參數傳遞給SQL Server中的存儲過程?

[英]How to pass the SELECT statement as a parameter to stored procedure in SQL Server?

我的代碼有什么問題? 我想傳遞選擇語句和where子句變量值:

ALTER PROC sp_ac_getItemLookupCode 
    @itemlookupcode varchar(20) = null,
    @select varchar(30)
AS
BEGIN
    SELECT DISTINCTT
        @select
    FROM
        [ReportHQMatajer].[dbo].[JFC_ItemDailySalesParent] pp
    WHERE 
        ItemLookupCode LIKE @itemlookupcode+'%' 
END

以上是我的存儲過程。 我執行以下代碼,但僅返回“ Name ”列

sp_ac_getItemLookupCode @select='ItemLookupCode',@itemlookupcode=1

它沒有返回所有值。 結果返回列名

通過使用SP_EXECUTESQL系統存儲的過程使用動態查詢,如下所示:

ALTER PROC sp_ac_getItemLookupCode 
@itemlookupcode varchar(20)= null,
@select varchar(30)
AS
BEGIN
declare @Query nvarchar(2000)
set @Query = 
    'select distinct ' + @select + '
    FROM
        [ReportHQMatajer].[dbo].[JFC_ItemDailySalesParent] pp
    WHERE 
        ItemLookupCode like ''' + @itemlookupcode+ + '%'' '
exec sp_executesql @Query
END

如果要將列名作為參數傳遞,則必須進行動態查詢,如下所示:

Exec ('select distinct '+@select+'
    FROM
        [ReportHQMatajer].[dbo].[JFC_ItemDailySalesParent] pp')

如果要傳遞列名(或表名或函數名等),則需要使用動態SQL:

ALTER PROC sp_ac_getItemLookupCode (
    @itemlookupcode varchar(20) = null,
    @select varchar(30)
) AS
BEGIN
    declare @sql = nvarchar(max);

    set @sql = '
select distinct @select
from [ReportHQMatajer].[dbo].[JFC_ItemDailySalesParent] pp
';

    set @sql = replace(@sql, '@select', @select);

    if (@itemlookupcode is not null)
    begin
        set @sql = @sql + 'where ItemLookupCode like ''' + @itemlookupcode + '%'''
    end;

    exec sp_executesql @sql;
END;

我添加了以下功能:如果@itemlookupcodeNULL ,則它將返回所有行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM