T-sql (Char(13)) 中的换行符不起作用
Line break in T-sql (Char(13)) is not working
我正在使用 T-sql(Sql 服务器 2008)存储过程,它 returns 是一个基于许多业务条件的自定义值。 (这必须在数据库上完成,因为我从 C#
代码中对许多存储过程进行了通用调用)。
我的问题是换行符。我在我的代码中使用 Char(13);Char(13) + char(10); char(10)...
但它不起作用。
注意:如果我测试 INSERT 语句,它可以工作,但在 SELECT 语句中没有 line break ,它生成一个 White space (在一个简单的查询上完成)。
下面是我的代码
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
有什么建议或帮助吗?
谢谢
您的 T-SQL 工作正常,它正在插入 char(13),但是根据您的客户,您需要添加一个额外的 char(10)。
char(13) + char(10)
在客户端而不是在您的 sql 查询中进行这样的格式化可能是一个更好的主意。
正如我在 中所解释的那样,Windows 上的换行符是 CHAR(13)+CHAR(10)
,但是否呈现为换行符取决于您如何打印它。
in the SELECT statment no line break ,it generates a White space [...] does not work in a simple SELECT
"simple SELECT" 没有解释您要做什么。请记住,您是这里唯一可以看到您屏幕的人。如果你想让别人理解你的问题,你需要明确。
如果您的意思是 SQL Server Management Studio 中的网格视图不显示换行符,您是对的:它不会,直到您单击工具栏中的 "Results to Text" 按钮.
您也可以使用以下语法:
......注意第 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;
我正在使用 T-sql(Sql 服务器 2008)存储过程,它 returns 是一个基于许多业务条件的自定义值。 (这必须在数据库上完成,因为我从 C#
代码中对许多存储过程进行了通用调用)。
我的问题是换行符。我在我的代码中使用 Char(13);Char(13) + char(10); char(10)...
但它不起作用。
注意:如果我测试 INSERT 语句,它可以工作,但在 SELECT 语句中没有 line break ,它生成一个 White space (在一个简单的查询上完成)。 下面是我的代码
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
有什么建议或帮助吗? 谢谢
您的 T-SQL 工作正常,它正在插入 char(13),但是根据您的客户,您需要添加一个额外的 char(10)。
char(13) + char(10)
在客户端而不是在您的 sql 查询中进行这样的格式化可能是一个更好的主意。
正如我在 CHAR(13)+CHAR(10)
,但是否呈现为换行符取决于您如何打印它。
in the SELECT statment no line break ,it generates a White space [...] does not work in a simple SELECT
"simple SELECT" 没有解释您要做什么。请记住,您是这里唯一可以看到您屏幕的人。如果你想让别人理解你的问题,你需要明确。
如果您的意思是 SQL Server Management Studio 中的网格视图不显示换行符,您是对的:它不会,直到您单击工具栏中的 "Results to Text" 按钮
您也可以使用以下语法:
......注意第 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;