TSQL或SQL动态WHERE子句

时间:2016-11-01 13:15:29

标签: sql sql-server tsql

我这里有两张桌子......

  
      
  1. GroupTable:uid,Level1,Level2,WhereClause
  2.   
  3. MainTable:uid,名称
  4.   

我需要创建一些允许我使用WhereClause字段作为查询的实际WHERE子句的东西。

select *
from MainTable
inner join GroupTable on GroupTable.uid=MainTable.uid
where {WhereClause}

换句话说,会将WhereClause字段评估为实际SQL。 WhereClause可能等于(1,2,3)'中的字段或类似的。我不喜欢这样做,但如果可能的话,重写这个过程目前还不行。希望有人可能会指出我正确的方向。谢谢!

4 个答案:

答案 0 :(得分:0)

您可以使用动态sql执行此操作,然后执行动态创建的sql字符串。

答案 1 :(得分:0)

不确定你想要什么,但

如果您愿意,可以像这样动态使用:

DECLARE @where NVARCHAR(500) = ''

SET @where = ' userid =  3 '


EXEC (  ' SELECT * FROM table_name WHERE  ' + @where )

SET @where = ' userid IN (2,3,4) '

EXEC (  ' SELECT * FROM table_name WHERE  ' + @where )

-- Or you can also use other typo things.

如果你确切地解释了你需要什么,我可能会帮忙。

希望它有所帮助,无论如何。 :)

答案 2 :(得分:0)

你可以这样做:

SELECT 'select * FROM mainTable
        inner join GroupTable on GroupTable.uid=MainTable.uid
        where ' + t.whereClause
FROM GroupTable

这将产生您想要的查询。

答案 3 :(得分:0)

这是使用动态sql的一个很好的例子,特别是动态的where子句,其中大部分都是这样的:

DECLARE @SQL varchar(1000)

SET @SQL = 'SELECT Cus_Name, Cus_City, Cus_Country FROM Customers '

IF @Cus_Name IS NOT NULL OR @Cus_City IS NOT NULL OR _
    @Cus_Country IS NOT NULL
 SET @SQL = @SQL + 'WHERE '

IF @Cus_Name IS NOT NULL
 SET @SQL = @SQL + 'Cus_Name = ' + @Cus_Name
...
EXEC(@SQL)

SQL Team