我想编写一个存储过程,如果我给出参数,那么它应该根据它查询它应该给我所有的结果
ALTER PROCEDURE [dbo].[Proc1]
@ID varchar(max)
AS
BEGIN
declare @sql varchar(max)
set @sql = 'SELECT * from Table1
WHERE (ID IN (' + @ID + '))'
SET NOCOUNT ON;
begin
exec(@sql)
end
END
当我传递2个参数时,它可以工作。当我传递1个参数时,它可以工作。
但我希望当我没有传递任何参数时,它会产生所有数据。
所以,我试过了:
(ID IN ('+@ID+') or ('+@ID+')='''')
但它不起作用。
有人可以建议如何解决这个问题吗?
答案 0 :(得分:0)
当我编写存储过程时,我将值设置为触发该逻辑的默认值。因此,如果没有参数发送到存储过程,则该值将默认并触发逻辑,否则它将使用ID值。
ALTER PROCEDURE [dbo].[Proc1]
@ID varchar(max) = NULL -- Set the default here
AS
BEGIN
IF @ID IS NULL BEGIN
-- Do the @ID value is not set logic here
END
ELSE BEGIN
-- Do the @ID value is set logic here
END
这是微软对我在IF...ELSE (Transact-SQL)
所做的解释