2017-01-02 70 views
-1

中有都柱namefid ..在這個有逗號分隔的多個值,所以我儘量拆分這些,但這顯示了一個錯誤子查詢返回多個值的SQL Server

Create procedure as sp2 
    @tick int 
As 
    Select 
     Table 4.column, 
     Table 5.column, 
     Table 3.column, 
     **--so here I used solution like this** 
     (Select b.fid 
     from table2 t2 
     cross apply (Select fid = s2.retval 
         from [udf-str-parase](t2.fid, ',') s2) b), 
     (Select b.name 
     from table2 t2 
     cross apply (Select name = s2.retval 
         from [udf-str-parase](t2.name, ',') s2) b), 
     Table 6.column 
    From 
     Table 2 
    Inner join 
     table4 on table4.id = table5.id 
    .......... 
    Where 
     tick = @tick 

我的功能:

CREATE FUNCTION [dbo].[udf-Str-Parse] 
    (@String varchar(max), @Delimiter varchar(10)) 
RETURNS TABLE 
AS 
    RETURN 
     (SELECT 
      RetSeq = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), 
      RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))) 
     FROM 
      (SELECT x = CAST('<x>'+ replace((SELECT @String as [*] For XML Path('')),@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A 
      CROSS APPLY 
       x.nodes('x') AS B(i) 
); 

錯誤:

Subquery returned more than 1 value.
This is not permitted when the sub query follows =, !=, <, <= , >, >= or when the sub query is used as an expression.

回答

0

嘗試這樣的事情

SELECT Table4.COLUMN, 
     Table5.COLUMN, 
     Table3.COLUMN, 
     fid, 
     name, 
     .. 
     Table6.COLUMN 
FROM Table2 t2 
     INNER JOIN table 
     .. 
     CROSS apply [Udf-str-parase] (t2.fid, ',') f (fid) 
     CROSS apply [Udf-str-parase] (t2.name, ',') n (name) 
+0

之前或之後在哪裏? –

+0

@cooluser - 之前'Where' –

+0

這顯示錯誤'udf-Str-Parse'不是一個可識別的函數名稱。 –