如何在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提供了如此详细的答案,但我想安德奥马尔的答案对我很有用。非常感谢!