我創建了一個測試存儲過程,用於從視圖中提取所選記錄。我使用SQL Server Management Studio的2012年。我用來創建它的代碼是:在執行存儲過程時聲明參數
create procedure [dbo].[andytest]
@CpnyID char(3)
, @FiscYr char(4)
, @LedgerID char(10)
, @Acct char(10)
as select * From dbo.view_Normal_AcctHist_Leads_AllEntities
where CpnyID in(@CpnyID)
and FiscYr in(@FiscYr)
and LedgerID in(@LedgerID)
and Acct in(@Acct)
在執行我使用:
exec andytest
@CpnyID= '131'
,@FiscYr='2014'
,@LedgerID='Actual'
,@Acct='637100'
我注意到,當我的腳本程序作爲「執行」 ,自帶代碼:
DECLARE @CpnyID char(3)
DECLARE @FiscYr char(4)
DECLARE @LedgerID char(10)
DECLARE @Acct char(10)
-- TODO: Set parameter values here.
set @CpnyID= '131'
set @FiscYr='2014'
set @LedgerID='Actual'
set @Acct='637100'
EXECUTE [dbo].[andytest]
@CpnyID
,@FiscYr
,@LedgerID
,@Acct
我的問題是爲什麼會當程序的創建需要一個被定義的變量被執行時重新聲明,它很重要,我應該在這個p用哪種方法關節病例?
真誠, 安迪
使用Script As Execute時,它將爲您生成參數。通常當你調用一個存儲過程時,你傳遞它的參數,而不是硬編碼的值。另外,請注意您的程序代碼。您正在使用IN而不是=。我擔心你認爲你可以傳遞一個分隔列表作爲參數的值,讓你的程序返回列表。參數不能像那樣工作。 – 2014-09-03 18:45:28
謝謝大家的回答和評論。他們都很有幫助。 – Andy 2014-09-03 18:59:36