如何在WHERE条件中选择全部?

时间:2015-10-07 05:21:46

标签: sql-server sql-server-2008

我有一组SQL语句,我需要使用where条件,但我想知道如何选择all where条件。那么需要在参数中插入什么才能使它全部选择?

@param1 nvarchar(max),
@param2 nvarchar(max)

DECLARE @SQLnvarchar(max)


SET @SQL= 'SELECT *
FROM Table1
WHERE Column1 IN (@param1) AND Column2 IN (@param2)'

EXEC sp_executesql @SQL; 

我尝试将列名放入param例如column1到@ param1中,但它并没有返回所有数据。例如,table1由4524行组成,但使用上面它只返回309行。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

如果您想要整个表,只需省略where子句。如果您绝对必须拥有它,则可以添加虚拟1=1条件:

SELECT * FROM Table1 WHERE 1 = 1

答案 1 :(得分:0)

我希望你能从这段代码中猜出一些东西

@param1 nvarchar(max),
@param2 nvarchar(max)

DECLARE @SQLnvarchar(max)


SET @SQL= 'SELECT *
FROM Table1
WHERE (Column1 IN (@param1) or 1=1 )AND Column2 IN ((@param2) or 1=1)'

答案 2 :(得分:0)

以下是您的问题的解决方案。在您的情况下,您可以利用COALESCE。

DECLARE @sql NVARCHAR(MAX)
DECLARE @ids NVARCHAR(MAX)
DECLARE @classes NVARCHAR(MAX)

--SET @ids = '1,2,3'

SET @sql = N'SELECT id,name,class FROM dbo.Student
WHERE 1 = 1 '
+ COALESCE(' AND id IN (' + @ids + ')', '')
+ COALESCE(' AND class IN (' + @classes + ')', '')

EXEC sp_executesql @sql

这是适合你的小提琴。

SQLFiddle

答案 3 :(得分:0)

正确的方法如果你必须在所有实例中执行一个特定的SQL并且无法动态地更改它,那么你必须发明一个魔术值,这意味着“不要关心这个参数",典型值为NULL

要重写SQL以支持此功能,您需要:

SELECT *
FROM Table1
WHERE (@param1 IS NULL OR Column1 = @param1)
  AND (@param2 IS NULL OR Column2 = @param2)