Sql server 避免where子句中的表函数?

Sql server 避免where子句中的表函数?,sql-server,database,sql-server-2008,stored-functions,Sql Server,Database,Sql Server 2008,Stored Functions,我在where子句中添加了table函数 有人能建议我如何避免where子句中的函数吗?您可以试试这个。在这个现有的查询中,我将首先指出一些问题 在select*from UTILfn_Split@unit_code“中的第一个单元代码,这里您必须使用一个列名而不是*,虽然我不知道您的函数UTILfn_Split,但仍然提到列名更可取 对于您的查询,您可以使用具有返回类型表的函数的内部联接而不是in 而不是 sl.sl_type in (select * from UTILfn_Split( @

我在where子句中添加了table函数


有人能建议我如何避免where子句中的函数吗?

您可以试试这个。在这个现有的查询中,我将首先指出一些问题

在select*from UTILfn_Split@unit_code“中的第一个单元代码,这里您必须使用一个列名而不是*,虽然我不知道您的函数UTILfn_Split,但仍然提到列名更可取

对于您的查询,您可以使用具有返回类型表的函数的内部联接而不是in

而不是

sl.sl_type in (select * from UTILfn_Split( @sl_type,',') ) 

你可以试试这个

yourtble as sl inner join 
(select value from UTILfn_Split( @sl_type,',') as t2 
on sl.sl_type = t2.[value]     ---- here column name with t2 depends on your function, 
---what table structure is returning, in your case it is [value]

你试过内部连接UTILfn吗_Split@sl_type、'、'sl2上的sl2.Value=sl.sl_类型?此外,SQL Server 2016及更高版本具有内置的。再次检查您的查询,因为似乎没有起始括号…检查此项并首先更正。函数returns@ValueTable[Value]nvarcharmaxy中的返回类型您可以使用内部联接替换所有in子句,就像我在上述代码中所做的那样。。。
yourtble as sl inner join 
(select value from UTILfn_Split( @sl_type,',') as t2 
on sl.sl_type = t2.[value]     ---- here column name with t2 depends on your function, 
---what table structure is returning, in your case it is [value]