繁体   English   中英

错误关键字“ SELECT”附近的语法不正确

[英]Error Incorrect syntax near the keyword 'SELECT'

我需要帮助。 我写这个查询

SELECT SUM(fi.etiliquido) FROM fi WHERE fi.fno IN (
    SELECT * from divideString(
        SELECT TOP 1 REPLACE(CAST( u.nrdoc AS nvarchar),'/',',') FROM u_ups1 as u WHERE 1057 IN ( 
            SELECT * FROM divideString(REPLACE(CAST(u.nrdoc AS nvarchar),'/',','))
        )
    )
)

但是SQL Server返回此错误

消息156,级别15,状态1,第4行关键字“ SELECT”附近的语法错误。 消息102,级别15,状态1,第7行')'附近的语法不正确。

我不知道为什么。 你能帮助我吗?

UPDATE splitString是一个获取字符串并返回该字符串中数字的函数

CREATE FUNCTION divideString (@InStr VARCHAR(MAX))
RETURNS @TempTab TABLE
   (id int not null)
AS
BEGIN
    SET @InStr = REPLACE(@InStr + ',', ',,', ',')
    DECLARE @SP INT
DECLARE @VALUE VARCHAR(1000)
WHILE PATINDEX('%,%', @INSTR ) <> 0 
BEGIN
   SELECT  @SP = PATINDEX('%,%',@INSTR)
   SELECT  @VALUE = LEFT(@INSTR , @SP - 1)
   SELECT  @INSTR = STUFF(@INSTR, 1, @SP, '')
   INSERT INTO @TempTab(id) VALUES (@VALUE)
END
    RETURN
END

你需要周围的子查询括号(除了in子查询),那么:

SELECT SUM(fi.etiliquido)
FROM fi
WHERE fi.fno IN (SELECT d.val
                 FROM divideString( (SELECT TOP 1 REPLACE(CAST( u.nrdoc AS nvarchar(max)), '/', ',')
                                     FROM u_ups1 as u
                                     WHERE 1057 IN (SELECT d.val
                                                    FROM divideString(REPLACE(CAST(u.nrdoc AS nvarchar(max)), '/', ',') d(val)
                                                   )
                                    )
                                   ) d(val)
                );

同样,在没有ORDER BY情况下使用TOP通常也是可疑的。

不建议在单个列中存储多个值。 但是,我认为您不需要为此使用表值函数。 LIKE应该工作:

SELECT SUM(fi.etiliquido)
FROM fi
WHERE EXISTS (SELECT 1
              FROM (SELECT TOP 1 u.nrdoc 
                    FROM u_ups1 u
                    WHERE '/' + u.nrdoc + '/' LIKE '%/1057/%' 
                   ) u
              WHERE '/' + u.nrdoc + '/' LIKE '%/' + fi.fno + '/%'
             );

而您可能想要的是:

而且,您想要的逻辑可能像这样简单:

SELECT SUM(fi.etiliquido)
FROM fi
WHERE EXISTS (SELECT 1
              FROM u_ups1 u
              WHERE '/' + u.nrdoc + '/' LIKE '%/1057/%' AND 
                    '/' + u.nrdoc + '/' LIKE '%/' + fi.fno + '/%'
             );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM