T-sql中的换行符(Char(13))不起作用

时间:2015-03-10 10:25:13

标签: c# .net sql-server tsql

我使用的是T-sql(Sql server 2008)存储过程,它根据许多业务条件返回一个custmized值。 (这必须在数据库上完成,因为我对C#代码中的许多存储过程进行了泛型调用)。 我的问题在于换行符。我在我的代码Char(13);Char(13) + char(10); char(10)...中使用但它不起作用。

注意:如果我测试了一个 INSERT 语句,但是在 SELECT 语句中没有换行符,它会生成一个白色空间(完成一个简单的查询)。 贝娄我的代码

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 @finalAddress=@finalAddress + ' ' + @jeuneFille + CHAR(13)
            if(@address is not null and @address != '')
                set @finalAddress=@finalAddress +  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 @finalAddress=@finalAddress +  @saleName + CHAR(13)
            if(@enseigne is not null and @enseigne != '')
                set @finalAddress=@finalAddress +  @enseigne + CHAR(13)
            if(@sigle is not null and @sigle != '')
                set @finalAddress=@finalAddress +  @sigle + CHAR(13)
            if(@address is not null and @address != '')
                set @finalAddress=@finalAddress +  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

有任何建议或帮助吗? 感谢

3 个答案:

答案 0 :(得分:3)

正如我在comment中解释的那样,在Windows上,换行符为CHAR(13)+CHAR(10),但是否会将其呈现为换行符取决于您的打印方式。

  

在SELECT语句中没有换行符,它会生成一个空格[...]在简单的SELECT中不起作用

“简单的SELECT”并没有解释你想要做什么。请记住,您是唯一一个可以看到您的屏幕的人。如果您希望其他人了解您的问题,您需要明确。

如果您的意思是SQL Server Management Studio中的网格视图不显示换行符,那么您是正确的:它不会,直到您单击工具栏中的“结果到文本”按钮为suggested in the first comment

答案 1 :(得分:2)

你的T-SQL工作正常,它插入了char(13),但是根据你的客户端你需要添加一个额外的char(10)。

 char(13) + char(10)

在客户端而不是在sql查询中进行这样的格式化可能是个更好的主意。

答案 2 :(得分:0)

您还可以使用以下语法:

......请注意第2行后的最后一个单引号...

                                  |  -> press enter and begin a new line with another...
SELECT 'use ' + DB_NAME() + ';' + '
    ' + 'CREATE USER ' + users.name + ' for ' + users.name + ';'
    | -> continued quote in line 3. 

这将产生以下输出:

use MyDatabase;

    CREATE USER User1 for User1;