SQL这种语法有什么问题?开始…如果…返回
下面是一个函数的摘录。我总是遇到语法错误 关键字“RETURN”附近的语法不正确 我的代码:SQL这种语法有什么问题?开始…如果…返回,sql,tsql,sql-server-2014,Sql,Tsql,Sql Server 2014,下面是一个函数的摘录。我总是遇到语法错误 关键字“RETURN”附近的语法不正确 我的代码: CREATE FUNCTION dbo.convttxt (@mhtztxt VARCHAR(MAX)) RETURNS FLOAT AS BEGIN DECLARE @mhtz FLOAT IF (ISNUMERIC(LTRIM(RTRIM(@mhtztxt))) RETURN CONVERT(FLOAT, LTRIM(RTRIM(@mhtztxt)))
CREATE FUNCTION dbo.convttxt (@mhtztxt VARCHAR(MAX))
RETURNS FLOAT
AS
BEGIN
DECLARE @mhtz FLOAT
IF (ISNUMERIC(LTRIM(RTRIM(@mhtztxt)))
RETURN CONVERT(FLOAT, LTRIM(RTRIM(@mhtztxt)))
SET @mhtz = (SELECT
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([COL1], 'xyz', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
FROM dbo.table1)
RETURN @mhtz
END
但替换逻辑仍然缺失-
CREATE FUNCTION dbo.convttxt (@mhtztxt VARCHAR(MAX))
RETURNS FLOAT
AS
BEGIN
DECLARE @mhtz FLOAT
IF ISNUMERIC(LTRIM(RTRIM(@mhtztxt))) = 1
SET @mhtz = CONVERT(FLOAT, LTRIM(RTRIM(@mhtztxt)))
ELSE
SELECT @mhtz =
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(name, 'xyz', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
FROM sys.all_objects
;
RETURN @mhtz
END
这是固定的,但@tgr击败了我
ALTER FUNCTION dbo.convttxt (@mhtztxt VARCHAR(MAX))
RETURNS FLOAT AS
BEGIN
DECLARE @mhtz FLOAT;
--below: extra parenthesis removed, variable spelled wrong, ISNUMERIC statement was not complete
IF ISNUMERIC(ltrim(rtrim(@mhtztxt)))=1
--RETURN convert(FLOAT, ltrim(rtrim(@mhtztxt)))
SET @mhtz = convert(FLOAT, ltrim(rtrim(@mhtztxt)));
ELSE
SET @mhtz=
(SELECT TOP(1)
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([COL1]
,'xyz', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
,'<Enter Text Here>', 0)
from (SELECT 1.00 UNION ALL SELECT 2.00) table1(col1)); -- emulating your table
RETURN @mhtz;
END -- needed an End
您可以进一步简化此操作,如下所示:
ALTER FUNCTION dbo.convttxt (@mhtztxt VARCHAR(MAX))
RETURNS FLOAT AS
BEGIN
RETURN
CASE
WHEN ISNUMERIC(ltrim(rtrim(@mhtztxt)))=1
THEN convert(FLOAT, ltrim(rtrim(@mhtztxt)))
ELSE
(SELECT TOP(1)
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([COL1]
,'xyz', 0),'<Enter Text Here>', 0),'<Enter Text Here>', 0)
,'<Enter Text Here>', 0),'<Enter Text Here>', 0),'<Enter Text Here>', 0)
,'<Enter Text Here>', 0),'<Enter Text Here>', 0)
from (SELECT 1.00 UNION ALL SELECT 2.00) table1(col1)) -- emulating your table
END
END
IF语句的括号不匹配。从这里我可以看到。ISNUMERICltrimrtrim@mthztt不平衡括号。4个左括号和3个右括号。如果这是一个问题,那么我投票关闭作为一个简单的印刷错误。你能显示整个功能吗?我只看到3开幕式parenthesis@bill. 在IF语句中有4个。如果****是数字****r**r*****MTHZTSELECTDBO.CONTTXXT 1234 ->这将工作选择DBO.CONTTXXT’ASDF’->这将给您一个转换错误,您应该考虑添加一些错误处理或TyySCAST命令。此外,如果这对您很重要,您不应该在大型查询中使用用户定义的函数,因为查询不会并行执行。CLR可能会做得更好: