![](/img/trans.png)
[英]How to pass SELECT statement result as parameter to function in stored procedure in 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;
我添加了以下功能:如果@itemlookupcode
為NULL
,則它將返回所有行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.