-
Notifications
You must be signed in to change notification settings - Fork 37
Open
Labels
Description
Summary
ScriptDom fails to parse valid T-SQL when TRIM function with FROM clause is used inside a RETURN statement. The same syntax parses correctly in SELECT or SET statements.
Version
Microsoft.SqlServer.TransactSql.ScriptDom: 170.157.0
Steps to Reproduce
Parse the following valid T-SQL:
CREATE FUNCTION dbo.TrimTest(@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN TRIM('x' FROM @str);
ENDExpected Result
The SQL should parse successfully, as it is valid T-SQL syntax that executes correctly on SQL Server.
Actual Result
Parse error: Incorrect syntax near 'TRIM'.
Error Messages
Line 5, Column 12: Incorrect syntax near 'TRIM'.
Additional Information
This issue affects all TRIM variations using the FROM clause inside a RETURN statement:
| Case | RETURN | SELECT / SET |
|---|---|---|
TRIM(@str) |
OK | OK |
TRIM('x' FROM @str) |
FAIL | OK |
TRIM(NCHAR(12288) FROM @str) |
FAIL | OK |
TRIM(LEADING ... FROM @str) |
FAIL | OK |
TRIM(TRAILING ... FROM @str) |
FAIL | OK |
TRIM(BOTH ... FROM @str) |
FAIL | OK |
Workaround
Using a variable as an intermediate step parses successfully:
CREATE FUNCTION dbo.TrimTest(@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @result NVARCHAR(MAX);
SET @result = TRIM('x' FROM @str);
RETURN @result;
ENDMinimal Reproduction Code
using Microsoft.SqlServer.TransactSql.ScriptDom;
var sql = """
CREATE FUNCTION dbo.Test(@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN TRIM('x' FROM @str);
END
""";
var parser = new TSql170Parser(initialQuotedIdentifiers: false);
using var reader = new StringReader(sql);
parser.Parse(reader, out var errors);
foreach (var e in errors)
Console.WriteLine($"Line {e.Line}, Col {e.Column}: {e.Message}");Tested with both TSql160Parser and TSql170Parser - same result.
Reactions are currently unavailable