Ошибка sp_executesql, если строка заканчивается на \ - PullRequest
1 голос
/ 23 октября 2019

Этот код:

EXEC sp_executesql N'
CREATE PROCEDURE [dbo].[a]
(
@VarA NVARCHAR(200), -- Path to exe e.g. e:\blah\blah\
@VarB INT -- 1 to log actions
)
AS
BEGIN
PRINT @VarA
PRINT @VarB
END'
GO

Это вызовет ошибку:

Msg 102, Level 15, State 1, Procedure a, Line 5 [Batch Start Line 0]
Incorrect syntax near ')'.
Msg 137, Level 15, State 2, Procedure a, Line 9 [Batch Start Line 0]
Must declare the scalar variable "@VarB".

Если вы удалите \, вместо этого используйте e: \ blah \ blah;если вы добавите пробел после того, как \ оно работает - все это, похоже, связано с этим ...

Итак - это ошибка?

Спасибо, доктор Майкл Дай.

1 Ответ

3 голосов
/ 23 октября 2019

Используется функция Обратная косая черта (продолжение строки) (Transact-SQL) . Это означает, что строки ниже:

(
@VarA NVARCHAR(200), -- Path to exe e.g. e:\blah\blah\
@VarB INT -- 1 to log actions
)

анализируются как

(
@VarA NVARCHAR(200), -- Path to exe e.g. e:\blah\blah\@VarB INT -- 1 to log actions
)

В результате выдается ошибка.

Следовательно, не заканчивайте вас 'Переведите строку с \, а затем непосредственно предшествует ей разрыв строки или возврат каретки и разрыв строки. Поскольку это комментарий, вы можете просто поставить . в конце:

(
@VarA NVARCHAR(200), -- Path to exe e.g. e:\blah\blah\.
@VarB INT -- 1 to log actions
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...