我试图在SQL Server中创建一个函数,但出现此错误:
[S0001] [102]'@ string2'附近的语法不正确
在线
DECLARE @string2 VARCHAR(255) = @s;
我创建了许多函数,但从未出现这种错误
已完成
CREATE FUNCTION dbo.GetMeterNumber(@s AS VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
IF @s IS NOT NULL
BEGIN
DECLARE @string2 VARCHAR(255) = @s;
@string2 = REPLACE(REPLACE(LEFT(REVERSE(LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)),
CHARINDEX('-',
REVERSE(
LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)))
- 1), 'NUMBER_', ''), '_OF_10', '')
RETURN @string2
END
END
GO
答案 0 :(得分:1)
当我假设您要在其中放置@string2 = ...
或set
时,您就以select
开始声明
答案 1 :(得分:1)
变量(@s
)的问题,应在BEGIN
之前声明,返回应在END
之后:
因此,正确的版本应该是:
CREATE FUNCTION dbo.GetMeterNumber(@s AS VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
DECLARE @string2 VARCHAR(MAX) = @s
IF @s IS NOT NULL
BEGIN
SET @string2 = REPLACE(REPLACE(LEFT(REVERSE(LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)),
CHARINDEX('-',
REVERSE(
LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2)) - 1)))
- 1), 'NUMBER_', ''), '_OF_10', '')
END
RETURN @string2
END
编辑:我将在核心loigc中添加一些预防措施:
REPLACE(REPLACE(LEFT(REVERSE(LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2 + '/')) - 1)),
CHARINDEX('-',
REVERSE(
LEFT(REVERSE(@string2), CHARINDEX('/', REVERSE(@string2 + '/')) - 1) + '-'))
- 1), 'NUMBER_', ''), '_OF_10', '')