我有一组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行。我该如何解决这个问题?
答案 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
这是适合你的小提琴。
答案 3 :(得分:0)
正确的方法如果你必须在所有实例中执行一个特定的SQL并且无法动态地更改它,那么你必须发明一个魔术值,这意味着“不要关心这个参数",典型值为NULL
。
要重写SQL以支持此功能,您需要:
SELECT *
FROM Table1
WHERE (@param1 IS NULL OR Column1 = @param1)
AND (@param2 IS NULL OR Column2 = @param2)