如何在SQLServer2008中返回新行

如何在SQLServer2008中返回新行,sql,sql-server,sql-server-2008,newline,indentation,Sql,Sql Server,Sql Server 2008,Newline,Indentation,我正在运行以下查询- SELECT 'SELECT * FROM LIFE' 我想要预期的输出- SELECT * FROM LIFE 但是,当我在新窗口中复制结果集时,它是 SELECT * FROM LIFE 根据下面的答案,当我使用以下 SELECT 'SELECT * ' + char(13) + char(10) + 'FROM LIFE' 输出仍然在一行中返回,并有很大的空间,如下所示- SELECT * FROM LIFE 我不能在结果集中得到换行符吗?抱歉,如果我

我正在运行以下查询-

SELECT 'SELECT * 
FROM LIFE'
我想要预期的输出-

SELECT *
FROM LIFE
但是,当我在新窗口中复制结果集时,它是

SELECT * FROM LIFE
根据下面的答案,当我使用以下

SELECT 'SELECT * ' + char(13) + char(10) + 'FROM LIFE'
输出仍然在一行中返回,并有很大的空间,如下所示-

SELECT *   FROM LIFE

我不能在结果集中得到换行符吗?抱歉,如果我遗漏了一些东西,但我没有很强的SQL技能

您可以添加回车符()和换行符(),如:


您可以添加回车符()和换行符(),如下所示:


我建议这是可行的,但是当您从结果集中复制回车时,SSMS正在替换回车

我刚刚针对SQLServer2008R2运行了下面的excel vba代码,并将文本打印到excel工作表中。要进行测试,请打开excel并将test()例程粘贴到VBA编辑器(alt+f11)中的工作表模块中,然后插入一个新模块(命名为dbMngr),然后将下面的dbMngr代码粘贴到该模块中

编辑:您还需要在dbMngr模块的顶部包含一个连接字符串常量

综合安全:

Private Const S_CON As String = "Provider=SQLOLEDB;Data Source=MyServerName;Initial Catalog=MyDB;Integrated Security=SSPI"
SQL Server身份验证:

Private Const S_CON As String = "Provider=SQLOLEDB;Data Source=MyServerName;Initial Catalog=MyDB;UID=MyUserName;PWD=MyPassword"
测试代码:

Sub test()
Dim sSQL As String
sSQL = "SELECT 'LINE A' + Char(10) + Char(13) + 'LINE B'"

Me.Range("A1").Value = sSQL


dbMngr.PasteToRange sSQL, Me.Range("A4")

End Sub
dbMngr代码:

Public Function GetRS(sSQL As String) As ADODB.Recordset
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

On Error GoTo errCatch:

With cn
    .ConnectionString = S_CON
    .CursorLocation = adUseClient
    .Mode = adModeRead
    .Open
End With

With rs
    .CursorLocation = adUseClient
    .CursorType = adOpenForwardOnly
    .ActiveConnection = cn
    .Open sSQL
End With

Set rs.ActiveConnection = Nothing
Set GetRS = rs

errCatch:
If Err.Number <> 0 Then
    MsgBox "Error in GetRS function"
    Debug.Print Err.Number & " " & Err.Description
    Stop
    Err.Clear
End If

If cn.State = adStateOpen Then
    cn.Close
End If

Set rs = Nothing
Set cn = Nothing
End Function

Public Sub PasteToRange(sSQL As String, rngDest As Range)
Dim rs As ADODB.Recordset, x As Integer, orng As Range

rngDest.CurrentRegion.Value = ""

Set rs = GetRS(sSQL)

For x = 0 To rs.Fields.Count - 1
    rngDest.Offset(0, x).Value = rs.Fields(x).Name
Next x

rngDest.Offset(1, 0).CopyFromRecordset rs
rngDest.CurrentRegion.Interior.Color = RGB(255, 255, 255)
rngDest.CurrentRegion.Font.Size = 8
rngDest.WrapText = False

If rs.State = adStateOpen Then
    rs.Close
End If

Set rs = Nothing
End Sub
公共函数getr(sSQL作为字符串)作为ADODB.Recordset Dim cn作为ADODB.Connection,rs作为ADODB.Recordset Set cn=New ADODB.Connection Set rs=New ADODB.Recordset 错误转到错误捕获时: 与cn .ConnectionString=S\u CON .CursorLocation=adUseClient .Mode=adModeRead 打开 以 用rs .CursorLocation=adUseClient .CursorType=adOpenForwardOnly .ActiveConnection=cn .打开sSQL 以 设置rs.ActiveConnection=Nothing 设置GetRS=rs 错误捕获: 如果错误号为0,则 MsgBox“GetRS函数中出错” 调试。打印错误号和错误说明(&R) 停止 呃,明白了 如果结束 如果cn.State=adStateOpen,则 cn.Close 如果结束 设置rs=无 设置cn=Nothing 端函数 公共子粘贴范围(sSQL作为字符串,rngDest作为范围) 将rs调为ADODB.Recordset,将x调为整数,或调为范围 rngDest.CurrentRegion.Value=“” 设置rs=GetRS(sSQL) 对于x=0到rs.Fields.Count-1 rngDest.Offset(0,x).Value=rs.Fields(x).Name 下一个x rngDest.Offset(1,0).CopyFromRecordset rs rngDest.CurrentRegion.Interior.Color=RGB(255、255、255) rngDest.CurrentRegion.Font.Size=8 rngDest.WrapText=False 如果rs.State=adStateOpen,则 rs.Close 如果结束 设置rs=无 端接头
我建议这是可行的,但是当您从结果集中复制回车时,SSMS正在替换回车符

我刚刚针对SQLServer2008R2运行了下面的excel vba代码,并将文本打印到excel工作表中。要进行测试,请打开excel并将test()例程粘贴到VBA编辑器(alt+f11)中的工作表模块中,然后插入一个新模块(命名为dbMngr),然后将下面的dbMngr代码粘贴到该模块中

编辑:您还需要在dbMngr模块的顶部包含一个连接字符串常量

综合安全:

Private Const S_CON As String = "Provider=SQLOLEDB;Data Source=MyServerName;Initial Catalog=MyDB;Integrated Security=SSPI"
SQL Server身份验证:

Private Const S_CON As String = "Provider=SQLOLEDB;Data Source=MyServerName;Initial Catalog=MyDB;UID=MyUserName;PWD=MyPassword"
测试代码:

Sub test()
Dim sSQL As String
sSQL = "SELECT 'LINE A' + Char(10) + Char(13) + 'LINE B'"

Me.Range("A1").Value = sSQL


dbMngr.PasteToRange sSQL, Me.Range("A4")

End Sub
dbMngr代码:

Public Function GetRS(sSQL As String) As ADODB.Recordset
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

On Error GoTo errCatch:

With cn
    .ConnectionString = S_CON
    .CursorLocation = adUseClient
    .Mode = adModeRead
    .Open
End With

With rs
    .CursorLocation = adUseClient
    .CursorType = adOpenForwardOnly
    .ActiveConnection = cn
    .Open sSQL
End With

Set rs.ActiveConnection = Nothing
Set GetRS = rs

errCatch:
If Err.Number <> 0 Then
    MsgBox "Error in GetRS function"
    Debug.Print Err.Number & " " & Err.Description
    Stop
    Err.Clear
End If

If cn.State = adStateOpen Then
    cn.Close
End If

Set rs = Nothing
Set cn = Nothing
End Function

Public Sub PasteToRange(sSQL As String, rngDest As Range)
Dim rs As ADODB.Recordset, x As Integer, orng As Range

rngDest.CurrentRegion.Value = ""

Set rs = GetRS(sSQL)

For x = 0 To rs.Fields.Count - 1
    rngDest.Offset(0, x).Value = rs.Fields(x).Name
Next x

rngDest.Offset(1, 0).CopyFromRecordset rs
rngDest.CurrentRegion.Interior.Color = RGB(255, 255, 255)
rngDest.CurrentRegion.Font.Size = 8
rngDest.WrapText = False

If rs.State = adStateOpen Then
    rs.Close
End If

Set rs = Nothing
End Sub
公共函数getr(sSQL作为字符串)作为ADODB.Recordset Dim cn作为ADODB.Connection,rs作为ADODB.Recordset Set cn=New ADODB.Connection Set rs=New ADODB.Recordset 错误转到错误捕获时: 与cn .ConnectionString=S\u CON .CursorLocation=adUseClient .Mode=adModeRead 打开 以 用rs .CursorLocation=adUseClient .CursorType=adOpenForwardOnly .ActiveConnection=cn .打开sSQL 以 设置rs.ActiveConnection=Nothing 设置GetRS=rs 错误捕获: 如果错误号为0,则 MsgBox“GetRS函数中出错” 调试。打印错误号和错误说明(&R) 停止 呃,明白了 如果结束 如果cn.State=adStateOpen,则 cn.Close 如果结束 设置rs=无 设置cn=Nothing 端函数 公共子粘贴范围(sSQL作为字符串,rngDest作为范围) 将rs调为ADODB.Recordset,将x调为整数,或调为范围 rngDest.CurrentRegion.Value=“” 设置rs=GetRS(sSQL) 对于x=0到rs.Fields.Count-1 rngDest.Offset(0,x).Value=rs.Fields(x).Name 下一个x rngDest.Offset(1,0).CopyFromRecordset rs rngDest.CurrentRegion.Interior.Color=RGB(255、255、255) rngDest.CurrentRegion.Font.Size=8 rngDest.WrapText=False 如果rs.State=adStateOpen,则 rs.Close 如果结束 设置rs=无 端接头
@canon:没错,但问题是先尝试在记事本中粘贴,然后在SS2008中复制粘贴。我知道这不是你需要的答案,但它排除了SS2008编辑器中一些奇特的人工智能工作。@canon:没错,但问题是先尝试将其粘贴到记事本中,而不是复制粘贴到SS2008中。我知道这不是你需要的答案,但它排除了SS2008编辑器中一些奇特的人工智能工作。请在我运行你的查询时查看我在问题中的编辑。它仍然在一行中返回结果集。@ReeyaOberoi:您在文本模式下尝试过吗?(菜单
query->results to->results to text
,或键盘
ctrl-T
)运行查询时,请查看问题中的编辑。它仍然在一行中返回结果集。@ReeyaOberoi:您在文本模式下尝试过吗?(菜单
query->results to->results to text
,或键盘
ctrl-T
)感谢@TehJake提供了如此详细的答案,但我想Andomar的答案对我来说很有用。非常感谢!谢谢@TehJake提供了如此详细的答案,但我想安德奥马尔的答案对我很有用。非常感谢!