Невозможно объединить строки с CHAR (0) в конце - PullRequest
0 голосов
/ 11 апреля 2019

Следующие фрагменты должны продемонстрировать проблему, с которой я столкнулся как в SQL Server, так и в моем веб-приложении VBScript:

SELECT '"Hello World"'
SELECT '"Hello World' + CHAR(0) + '"'

Результаты:

"Hello World"
"Hello World

Обратите внимание, что второй результатВ строке отсутствует последняя двойная кавычка.

Я понимаю, что вы не можете объединить строки со значением NULL в SQL Server.Однако следующий фрагмент показывает, что CHAR (0) не считается NULL в отношении SQL Server.

SELECT ISNULL(CHAR(0), 'CHAR(0) IS CONSIDERED NULL')

Результат:


Кроме того, когда я читаю это значениеиз БД в переменную в VBScript, я также не могу объединить эту переменную.

Я не разработчик C, но я понимаю, что строки в стиле C заканчиваются нулевым символом.Это актуально?Может кто-нибудь, пожалуйста, помогите мне понять, почему это происходит в SQL Server и в VBScript?

Я могу решить свою непосредственную проблему, просто заменив все CHAR (0) в поврежденных данных, но сначала я хотел бы понять причину этого и разработать профилактическое решение.


РЕДАКТИРОВАТЬ: Включая некоторые VBScript

testSql = "SELECT '""Hello World' + CHAR(0) + '""' AS TestString"
set resultSet = conn.execute(testSql)
testString = resultSet.Fields.Item("TestString")

testString = testString & "}"

Response.Write testString

Результат:

"Hello World

1 Ответ

1 голос
/ 11 апреля 2019

SQL-сервер объединяет строки, заканчивающиеся нулевыми символами. Смотрите этот пример:

SELECT len('"Hello World' + CHAR(0) + '"')

Выход:

14

SELECT len ('"Hello World" + CHAR (0) +' "'+'" Hello World "+ CHAR (0) + '"')

Выход:

28

Результат тот же, когда вы сначала сохраняете строку в CTE или в таблице.

Именно обработка и вывод в VB делает его таким, как будто это не так. Попробуйте напечатать длину строки, которую вы получаете из SQL в VB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...