Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于参数获取所有结果器数据的存储过程_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 基于参数获取所有结果器数据的存储过程

Sql 基于参数获取所有结果器数据的存储过程,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我想写一个存储过程,如果我给出参数,那么它应该基于这个参数进行查询,否则它应该给出所有结果 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

我想写一个存储过程,如果我给出参数,那么它应该基于这个参数进行查询,否则它应该给出所有结果

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
当我传递两个参数时,它就工作了。当我传递1个参数时,它工作

但我希望,当我不传递任何参数时,它将生成所有数据

所以,我试着:

 (ID IN ('+@ID+') or ('+@ID+')='''')
但它不起作用


有谁能建议如何解决这个问题吗?

当我编写存储过程时,我将该值设置为触发该逻辑的默认值。因此,如果未向存储过程发送任何参数,则该值将默认并触发逻辑,否则将使用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
这是微软对我当时所做的解释