SQL строковое значение, охватывающее несколько строк в запросе
UPDATE: поле Bio может содержать апострофы (см. обновлённый пример)
У меня есть SQL-запрос, который содержит значение, занимающее несколько строк, из-за чего запрос не выполняется:
UPDATE User SET UserId=12345, Name="J Doe", Location="USA", Bio="I'm a
bio that has an apostrophe, and I'm
spanning multiple lines!"
WHERE UserId=12345
В C# можно использовать символ @
перед строкой Bio=@"..."
, чтобы разрешить ей занимать несколько строк, но я не уверен, как достичь того же результата в SQL-запросах. Как можно сделать так, чтобы строка занимала несколько строк, не прибегая к ручной конкатенации строк:
Bio="I'm a"
+" bio that has an apostrophe, and I'm"
+" spanning multiple lines!"
2 ответ(ов)
В SQL Server допустимо использование многострочных строк при обновлении записей, но важно использовать одинарные кавычки вместо двойных. Пример:
UPDATE User
SET UserId = 12345
, Name = 'J Doe'
, Location = 'USA'
, Bio='my bio
spans
multiple
lines!'
WHERE UserId = 12345
Однако обратите внимание, что в SQL Server многострочные строки можно создавать, используя символы переноса строки внутри одинарных кавычек, если они заключены в дополнительную строку. Это может вызвать проблемы с синтаксисом, поэтому рекомендуется избегать многострочных строк, если это не необходимо. Для лучшей совместимости можете использовать символ N
для определения строки как юникодной и избегать потенциальных проблем с перенаправлением.
Чтобы определить, какой тип данных у столбца "BIO", нужно сначала рассмотреть контекст: в зависимости от используемой базы данных (SQL Server, Oracle, MySQL) тип может различаться. Обычно для хранения текстовой информации используется тип данных VARCHAR
или TEXT
, например:
- MySQL: тип данных для длинного текста —
TEXT
, а для коротких строк —VARCHAR(n)
, гдеn
— максимальная длина. - SQL Server: аналогично, для длинного текста используется
VARCHAR(MAX)
илиNVARCHAR(MAX)
, а для фиксированной длины —VARCHAR(n)
. - Oracle: тип данных для строк — это
VARCHAR2(n)
илиCLOB
для больших объемов текста.
Обратите внимание, что вы можете использовать одинарные кавычки для многострочного текста, как в примере ниже:
UPDATE table SET mycolumn = 'hello world,
my name is carlos.
goodbye.'
WHERE id = 1;
Также стоит помнить, что если вы собираете SQL-запрос в C# и переменная может содержать одинарные кавычки, это может привести к ошибкам. Вам стоит экранировать одинарные кавычки двойными, чтобы избежать сбоя в запросе. Например:
string bio = "hello world,\nmy name is carlos.\ngoodbye.".Replace("'", "''");
string sql = $"UPDATE table SET mycolumn = '{bio}' WHERE id = 1;";
Кроме того, вы можете завершать SQL-запросы точкой с запятой, как это делается в C#. Это просто к сведению.
Как вывести список таблиц в файле базы данных SQLite, открытом с помощью ATTACH?
Обновление и замена части строки
Как вставить несколько строк в SQLite?
Синтаксис SQLite для условия If Else
Удаление таблицы в старой версии SQLite, где не поддерживается IF EXISTS