【发布时间】:2016-08-23 10:16:31
【问题描述】:
我需要帮助。 我写了这个查询
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返回这个错误
Msg 156, Level 15, State 1, Line 4 关键字附近的语法错误 '选择'。消息 102,级别 15,状态 1,第 7 行附近的语法不正确 ')'。
我不知道为什么。 你能帮帮我吗?
更新 divideString 是一个获取字符串并返回该字符串中的数字的函数
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
【问题讨论】:
-
什么是
divideString? -
divideString是什么?另外,你不应该用IN做SELECT *,而只能选择一个字段。 -
您不能将选择作为函数的参数。
-
我不确定你的函数是否返回。如果它返回一个表尝试将第 4 行更改为: SELECT * FROM (divideString(REPLACE(CAST(u.nrdoc AS nvarchar),'/',','))) as d
-
我把函数放在我的问题中
标签: sql sql-server