Отработка следующее заявление T-SQL в SSMS выдает сообщение об ошибке, которое содержит ровно один пробел :БРОСОК с знаком процента (%) производит странное сообщение об ошибке
THROW 50000, 'abc%de', 0;
Msg 50000, Level 16, State 0, Line 1
Однако, если я бежать%, удваивая его, я получаю ожидаемое сообщение об ошибке:
THROW 50000, 'abc%%de', 0;
Msg 50000, Level 16, State 0, Line 1
abc%de
Я также заметил, что когда% следуют пространства, он просто пропустил:
THROW 50000, 'abc% de', 0;
Msg 50000, Level 16, State 0, Line 1
abc de
По какой-то причине THROW интерпретирует% особым образом.
- Кто-нибудь знает почему?
- Есть ли другие «специальные» персонажи?
- Является ли это документированным где угодно?
Я наблюдал это поведение в MS SQL Server 2012 и 2014 году. Я не пробовал другие версии.
Я также попытался ADO.NET, с аналогичными результатами.
Это не ясно видно здесь, но я перепроверил: сообщение об ошибке, действительно, не является пустой строкой, но ровно один пробел.
Звучит как параметры форматирования printf,% s,% d и т. Д.Не похоже, что их можно использовать в любом случае :( –
Вы можете использовать их с помощью функции FORMATMESSAGE. Https://msdn.microsoft.com/en-us/library/ee677615.aspx. Я предполагаю, что это является причиной того, почему% показывает это поведение. – JodyT
Этот ответ может быть интересен: http://dba.stackexchange.com/a/74249/24734 Я предполагаю, что он либо подключен к функции formatmessage, либо что-то осталось – jpw