我的代码出了什么问题?我想传递select语句和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
它没有返回所有值。它返回列名称作为结果
答案 0 :(得分:0)
使用SP_EXECUTESQL
系统存储的proecures作为下一步使用动态查询: -
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
答案 1 :(得分:0)
如果要将列名称作为参数传递,则必须进行动态查询,如下所示: -
Exec ('select distinct '+@select+'
FROM
[ReportHQMatajer].[dbo].[JFC_ItemDailySalesParent] pp')
答案 2 :(得分:-1)
如果要传递列名(或表名或函数名等),则需要使用动态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
的功能,然后返回所有行。