私のコードで何が問題になっていますか?私はselect文とwhere句の変数値を渡したい:SELECTステートメントをSQL Serverのストアドプロシージャのパラメータとして渡す方法はありますか。
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
上記は私のストアドプロシージャです。私は、次のコードを実行し、それだけで
sp_ac_getItemLookupCode @select='ItemLookupCode',@itemlookupcode=1
それはすべての値を返すされていない列Name
を返します。
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;
私がコメントを追加しました:それは
"ダイナミックSQL" –
サイドノート:ストアドプロシージャのプレフィックス 'sp_'を使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –