2012-08-08 66 views
1

我有创建一个SQL Server表值函数由我,我已经粘贴下面SQL服务器:表值函数不与子查询

CREATE FUNCTION [dbo].[getTableFromString] 
(  
    @String AS nvarchar(max) 

) 
RETURNS @ReturnTable TABLE (StringValues nvarchar(10) ) 
AS begin 

    if (SELECT CHARINDEX(',', @String)) = 0 
     begin 
       insert into @ReturnTable (StringValues) values (subString(@String,1,len(@String))); 
     end 
    else 
     begin 
      while (SELECT CHARINDEX(',', @String)) > 0 
      begin 
       insert into @ReturnTable (StringValues) values (subString(@String,1,CHARINDEX(',', @String)-1)); 
       set @String = subString(@String,CHARINDEX(',', @String)+1,len(@String)); 

       if (SELECT CHARINDEX(',', @String)) = 0 
       begin 
         insert into @ReturnTable (StringValues) values (subString(@String,1,len(@String))); 
       end   
      end 
     end 

    return ; 
end 

创建脚本,我使用此功能工作像下面

Select sum(NetSales) 
from vwxsalesall 
where Company = 'rs' 
and storecode = (select cPrimaryStockRoomCode from CompanyMaster.CompanyProfileDetail where cCompanyNo = 'rs' and cSecondaryStockRoomCode = 'R01B') 
and trandate >= '2012-01-01' 
and trandate <= '2012-01-31' 
and ( 
     brand in ( 
        select StringValues from dbo.getTableFromString(
                    select vIncludedBrandCodes 
                    from StockRoomTargetData.MonthlyTarget 
                    where cCompanyNo = 'rs' 
                    and cSecondaryStockRoomCode = 'R01B' 
                    and nYear = 2012 
                    and nMonth = 8 
                    ) 
       ) 
    ) 

不幸的是,我得到这个错误

消息156,15级,状态1,10号线
关键字'select'附近的语法不正确。
消息102,级别15,状态1,行16
附近有语法错误 ')'。

请帮我

+4

你需要把'选择vIncludedBrandCodes ...'子查询到括号来表示到SQL Server,这是实际上是一个子查询。 – 2012-08-08 12:06:22

+0

请你能多解释一下吗? – Prabhakantha 2012-08-08 13:07:48

+1

请看我的答案。 – 2012-08-08 13:21:25

回答

0

您需要添加另一组围绕子查询括号,例如

select StringValues from dbo.getTableFromString(({ your-subquery })) 

               ^    ^
               (parenthesis added) 

第一套parenthessis的语法属于TVF调用,并表示第二子查询。

现在查询:

Select sum(NetSales) 
from vwxsalesall 
where Company = 'rs' 
and storecode = (select cPrimaryStockRoomCode from CompanyMaster.CompanyProfileDetail where cCompanyNo = 'rs' and cSecondaryStockRoomCode = 'R01B') 
and trandate >= '2012-01-01' 
and trandate <= '2012-01-31' 
and ( 
     brand in ( 
        select StringValues from dbo.getTableFromString((
                    select vIncludedBrandCodes 
                    from StockRoomTargetData.MonthlyTarget 
                    where cCompanyNo = 'rs' 
                    and cSecondaryStockRoomCode = 'R01B' 
                    and nYear = 2012 
                    and nMonth = 8 
                    )) 
       ) 
    ) 
+0

消息102,级别15,状态1,行10 附近有语法错误('。 消息102,级别15,状态1,行17 附近有语法错误 ')'。 – Prabhakantha 2012-08-09 05:50:47

+0

:(这个我已经试过:(我收到上述错误:( – Prabhakantha 2012-08-09 05:52:03

+0

@Prabhakantha它为我,[看到它自己(http://sqlfiddle.com/#!3/e1dc5/1)。哪个版本SQL服务器您使用的是? – 2012-08-09 07:27:49