2015-03-10 7 views
-3

Я использую хранимую процедуру T-sql (Sql server 2008), которая возвращает значения custmized, основанные на многих бизнес-условиях. (Это необходимо сделать в базе данных, потому что у меня есть общий вызов для многих хранимых процедур из кода C#). Моя проблема здесь с перерывом. Я использую в своем коде Char(13);Char(13) + char(10); char(10)..., но он не работает.Разрыв строки в T-sql (Char (13)) не работает

NB: Если я испытываю ВСТАВИТЬ Постулаты это работает, но в ВЫБРАТЬ Постулаты не разрыв строки, он генерирует белого пространства (Done на простом запросе). Bellow мой код

ALTER PROCEDURE [dbo].[getDebtorAddress] (
    @idFolder int 

) 
AS 
BEGIN 
DECLARE 
    @type bit , 
    @firstName varchar(100) , 
    @familyName varchar(100) , 
    @raisonSocial varchar(100), 
    @jeuneFille varchar(100) , 
    @saleName varchar (100) , 
    @enseigne varchar (100) , 
    @sigle varchar (100) , 
    @address varchar (max), 
    @lieuDit varchar(100) , 
    @postalCode varchar (100), 
    @city varchar (100), 
    @country varchar (100), 
    @finalAddress nvarchar(max) 


    SET NOCOUNT ON; 
    SELECT DISTINCT 
    @firstName = Actor.M_EN_NOM, 
    @familyName = Actor.M_EN_PRENOM1, 
    @raisonSocial = Actor.M_EN_RAISONSOCIALE, 
    @jeuneFille = Actor.M_EN_NOMJEUNEFILLE, 
    @saleName = Actor.M_EN_NOMCOMMERCIAL, 
    @enseigne = Actor.M_EN_ENSEIGNE, 
    @sigle = Actor.M_EN_SIGLE, 
    @address = ActorCP.M_PR_CP_ADRESSE, 
    @lieuDit = ActorCP.M_PR_CP_LIEUDIT, 
    @postalCode = PostalCode.C_PA_CP_CODEPOSTALE, 
    @city = PostalCode.C_PA_CP_VILLE, 
    @country = Country.C_PA_PA_LIBELLE, 
    @type = Actor.M_EN_TYPE 


    FROM M_EN Actor 
    LEFT OUTER JOIN M_DE Debtor ON Actor.M_EN_ID =Debtor.M_EN_ID 
    LEFT OUTER JOIN M_DO Folder ON Debtor.M_DE_ID= Folder.M_DE_ID 
    LEFT OUTER JOIN M_PR_CP ActorCP ON Actor.M_EN_ID = ActorCP.M_EN_ID 
    LEFT OUTER JOIN C_PA_CP PostalCode ON ActorCP.C_PA_CP_ID = PostalCode.C_PA_CP_ID 
    LEFT OUTER JOIN C_PA_PA Country ON ActorCP.C_PA_PA_ID = Country.C_PA_PA_ID 
    WHERE Folder.M_DO_ID = @idFolder 

    if(@type=0) 
     begin 
      if (@firstName is not Null and @firstName !='') 
       set @finalAddress= @firstName 
      if(@familyName is not Null and @familyName != '') 
       set @finalAddress = @finalAddress + ' ' + @familyName +CHAR(13) 
      if(@jeuneFille is not null and @jeuneFille !='') 
       set @[email protected] + ' ' + @jeuneFille + CHAR(13) 
      if(@address is not null and @address != '') 
       set @[email protected] + REPLACE(@address,'|',char(13)) 
      if(@lieuDit is not null and @lieuDit != '') 
       set @finalAddress = @finalAddress + @lieuDit + CHAR(13) 
      if(@postalCode is not null and @postalCode != '') 
       set @finalAddress = @finalAddress + @postalCode + CHAR(13) 
      if(@country is not null and @country != '') 
       set @finalAddress = @finalAddress + @country + CHAR(13) 
     end 
    else 
     begin 
      if (@raisonSocial is Null or @raisonSocial = '') 
       Begin 
        if(@firstName is not null and @firstName != '') 
         set @finalAddress = @finalAddress + @firstName + CHAR(13) 
        if(@familyName is not null and @familyName != '') 
         set @finalAddress = @finalAddress + @familyName + CHAR(13) 
       end 
      else 
       set @finalAddress = @finalAddress + @raisonSocial + CHAR(13) 
      if(@jeuneFille is not null and @jeuneFille !='') 
       set @finalAddress=CHAR(13) + @finalAddress + ' ' + @jeuneFille + CHAR(13) 
      if(@saleName is not null and @saleName != '') 
       set @[email protected] + @saleName + CHAR(13) 
      if(@enseigne is not null and @enseigne != '') 
       set @[email protected] + @enseigne + CHAR(13) 
      if(@sigle is not null and @sigle != '') 
       set @[email protected] + @sigle + CHAR(13) 
      if(@address is not null and @address != '') 
       set @[email protected] + REPLACE(@address,'|',char(13)) 
     end 

     Create Table #TempAddress 
     (
      TempAddress_ID int , 
      adresse nvarchar(max) 
     ) 
     INSERT INTO #TempAddress (#TempAddress.adresse) VALUES(@finalAddress) 
     SELECT #TempAddress.adresse from #TempAddress 
     DROP TABLE #TempAddress 
END 

текущий результат

aaaaa bbbbb ccccc dddddd 

но мой ожидаемый результат

aaaaa 
bbbbb 
ccccc 
ddddd 

Любое предложение или помощь? Thanks

+3

Уже ответил здесь: http://stackoverflow.com/questions/31057/how-to-insert-a-line-break-in-a-sql-server-varchar-nvarchar-string. Используйте результаты запроса для текста ... – smoore4

+0

@SQLDBA, как я уже сказал в своем описании Char (13) не работает –

+0

Любое предложение !! –

ответ

3

Как я объяснил в своем comment, в Windows новая строка CHAR(13)+CHAR(10), но независимо от того, будет ли она отображаться как новая строка, зависит от того, как вы ее распечатываете.

в SELECT, даного нет разрыва строки, она не создает Белое пространство [...] не работает в простом SELECT,

«простого SELECT» не объясняет, что вы пытаетесь делать. Пожалуйста, помните, что вы единственный, кто может видеть ваш экран. Вы должны быть явным, если хотите, чтобы другие понимали вашу проблему.

Если вы имеете в виду, что вид сетки в SQL Server Management Studio не отображает новые строки, вы правы: это не так, пока вы не нажмете кнопку «Результаты в текст» на панели инструментов как suggested in the first comment.

+0

Вы абсолютно правы в результатах работы в студиях sql server management. Но все же проблема в коде C#. Поэтому я использовал «\ n» вместо CHAR (13). Он будет рассматриваться как линия прерывания. –

2

Ваш T-SQL отлично работает, вставляя char (13), однако в зависимости от вашего клиента вам нужно добавить дополнительный символ (10).

char(13) + char(10) 

Это, вероятно, лучше, чтобы сделать форматирование, как это на стороне клиента, а не в вашем SQL запросе.

Смежные вопросы