我有一个需要增强的存储过程。这就是我现在所拥有的。
ALTER PROCEDURE [rw].[sp_EFT_NoticeXLS2]
(@Scope varchar(50)
, @AcctPeriod char(6)
, @CompanyID nchar(10))
AS ......
我需要做的是仅在@CompanyID为0000时才将变量@GLsubacct传递给它。
我试过.....
ALTER PROCEDURE [rw].[sp_EFT_NoticeXLS2]
(@Scope varchar(50)
, @AcctPeriod char(6)
, @CompanyID nchar(10)
IF (@CompanyID IS 0000)
@GLsubacct varchar(1000))
AS ....
但是我收到了一个错误。我不知道如何编写if语句。我需要得到所有帮助,谢谢!
答案 0 :(得分:1)
你不能这样做。
您可以将第二个变量设置为"可以为空..." ...使其成为"可选"。
如果规则不遵循,您可以提出异常。
通用示例:
Use Northwind
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[uspDoSomething]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[uspDoSomething]
GO
CREATE PROCEDURE [dbo].[uspDoSomething]
(
@CustomerId varchar(12)
, @PostalCode varchar(12) = NULL
)
AS
SET NOCOUNT ON;
if @CustomerId = 'ALFKI' AND @PostalCode IS NULL
BEGIN
THROW 51000, 'You must supply a Postal Code with this @CustomerId.', 1;
END
select * from dbo.Customers c
where
c.CustomerID = @CustomerId
AND
( @PostalCode IS NULL OR c.PostalCode = @PostalCode )
GO
/* examples */
exec [dbo].[uspDoSomething] 'ALFKI' , '12209'
exec [dbo].[uspDoSomething] 'ALFKI'
exec [dbo].[uspDoSomething] 'ANATR' , '05021'
答案 1 :(得分:0)
您可能不需要使用下面的"11111
声明,具体取决于您的存储过程实际上所做的,但是您要查找的内容可能是这样的:
IF