0

SQL строковое значение, охватывающее несколько строк в запросе

10

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 ответ(ов)

0

В SQL Server допустимо использование многострочных строк при обновлении записей, но важно использовать одинарные кавычки вместо двойных. Пример:

UPDATE User
SET UserId = 12345
   , Name = 'J Doe'
   , Location = 'USA'
   , Bio='my bio
spans 
multiple
lines!'
WHERE UserId = 12345

Однако обратите внимание, что в SQL Server многострочные строки можно создавать, используя символы переноса строки внутри одинарных кавычек, если они заключены в дополнительную строку. Это может вызвать проблемы с синтаксисом, поэтому рекомендуется избегать многострочных строк, если это не необходимо. Для лучшей совместимости можете использовать символ N для определения строки как юникодной и избегать потенциальных проблем с перенаправлением.

0

Чтобы определить, какой тип данных у столбца "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#. Это просто к сведению.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь