关于这个话题,我没有看到任何类似的问题,我必须为我现在正在做的事情研究这个问题。我想我应该把答案贴出来以防其他人也有同样的问题。


当前回答

我来这里是因为我担心我在c#字符串中指定的cr-lfs没有在SQl Server Management Studio查询响应中显示。

事实证明,它们确实存在,但没有被展示出来。

要“查看”cr-lfs,使用如下的打印语句:

declare @tmp varchar(500)    
select @tmp = msgbody from emailssentlog where id=6769;
print @tmp

其他回答

在某些特殊情况下,你可能会发现这很有用(例如在MS Report中呈现cell-content) 例子:

select * from 
(
values
    ('use STAGING'),
    ('go'),
    ('EXEC sp_MSforeachtable 
@command1=''select ''''?'''' as tablename,count(1) as anzahl from  ? having count(1) = 0''')
) as t([Copy_and_execute_this_statement])
go

所有这些选项都可以工作,这取决于您的情况,但如果您使用SSMS(正如在一些评论中提到的SSMS隐藏CR/ lf),您可能看不到它们中的任何一个工作。

所以,与其开车去拐弯,不如检查一下这个设置

工具|选项

我想说的

concat('This is line 1.', 0xd0a, 'This is line 2.')

or

concat(N'This is line 1.', 0xd000a, N'This is line 2.')

在SSMS中运行这个,它显示了SQL中的换行符本身是如何成为字符串值的一部分的:

PRINT 'Line 1
Line 2
Line 3'
PRINT ''

PRINT 'How long is a blank line feed?'
PRINT LEN('
')
PRINT ''

PRINT 'What are the ASCII values?'
PRINT ASCII(SUBSTRING('
',1,1))
PRINT ASCII(SUBSTRING('
',2,1))

结果: 1号线 第2行 3号线

一个空换行有多长? 2

ASCII值是什么? 13 10

或者如果你更愿意在一行中指定字符串(几乎!),你可以像这样使用REPLACE()(可选地使用CHAR(13)+CHAR(10)作为替换):

PRINT REPLACE('Line 1`Line 2`Line 3','`','
')

我来这里是因为我担心我在c#字符串中指定的cr-lfs没有在SQl Server Management Studio查询响应中显示。

事实证明,它们确实存在,但没有被展示出来。

要“查看”cr-lfs,使用如下的打印语句:

declare @tmp varchar(500)    
select @tmp = msgbody from emailssentlog where id=6769;
print @tmp