2015-01-07 2 views
0

Я работаю в приложении ASP.net с базой данных SQL Server 2008. Я знаю в .net, когда нам нужно сделать длинную конкатенацию строк, мы должны использовать StringBuilder вместо использования оператора «+» или «&». EX.Конкатенация длинной строки в SQL Server 2008

string myString = "SELECT column1," 
+ " column2," 
+ " column3," 
+ " column4," 
+ " column5," 
+ " column6," 
+ " FROM table1 t1" 
+ " JOIN table2 t2" 
+ " ON t1.column1 = t2.column1"; 

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

+0

Лично я использую это достаточное количество для выполнения динамического SQL, и это никогда не вызвало никаких проблем с производительностью еще. Я не думаю (может быть, кто-то может исправить меня по этому поводу, если я не прав), что строки в SQL неизменяемы, как и на языках .net (что является основной проблемой и почему вас обычно учат не создавать большие блоки текста в виде строк). – user2366842

+0

Что вы считаете «длинным»? И что вы конкатенируете? Просто динамические строки SQL? –

+0

FYI, в коде, который вы отправили, нет конкатенации строк. Это будет храниться как единая строка во время компиляции. –

ответ

0

Вы можете использовать встроенный файл T-SQL Concat method, который является эквивалентом построения строки с построителем строк.

Согласно документации, это доступна только в SQL Server 2012 или 2014 так в вашем случае, вы должны придерживаться оператора +.

0

В моем ограниченном опыте, я обнаружил, что почти каждый раз, когда я думаю, что я должен конкатенировать данные в SQL-запросе, я нахожу позже, что я должен был запросить его как есть, а затем обработать манипуляции с строками на C# land. Каждый раз, когда вы объединяете два результата из базы данных, вы увеличиваете вероятность столкновения с краем.

Рассмотрите, например, адрес. Мои база данных хранит адрес со следующими столбцами:

  • ADDR1
  • Addr2
  • Город
  • StateCd
  • ZipCD
  • ZipSuf
  • CntryCd

Сначала это кажется логичным иметь Addr1 и Addr2 на отдельной строке, за которой следуют City, StateCd, ZipCd-ZipSuf, CtryCd. В действительности это приводит к большому условному форматированию в SQL, если Addr2 или ZipSuf равны нулю.

0

Я не могу думать о какой-либо причине не использовать +

DECLARE @myString VARCHAR(4000) = 'SELECT column1,' 
+ ' column2,' 
+ ' column3,' 
+ ' column4,' 
+ ' column5,' 
+ ' column6,' 
+ ' FROM table1 t1' 
+ ' JOIN table2 t2' 
+ ' ON t1.column1 = t2.column1'; 
Смежные вопросы