在transact sql

时间:2016-11-22 21:15:00

标签: sql sql-server stored-procedures

我有一个需要增强的存储过程。这就是我现在所拥有的。

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语句。我需要得到所有帮助,谢谢!

2 个答案:

答案 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