2015-04-15 3 views
1

Я бег следующий запроса -Как вернуть новую строку в SQL Server 2008

SELECT 'SELECT * 
FROM LIFE' 

Я хочу ожидаемый результат, как -

SELECT * 
FROM LIFE 

Однако, когда я копирую результирующий набор в новом окне , это

SELECT * FROM LIFE 

согласно ниже ответ, когда я использую следующие

SELECT 'SELECT * ' + char(13) + char(10) + 'FROM LIFE' 

Выход еще возвращается в одну линию с широким пространством следующим образом -

SELECT * FROM LIFE 

Могу ли я не получить символ новой строки в результате-набор? Извините, если у меня что-то не хватает, но у меня нет сильных навыков SQL.

+1

@canon: Правильно, но вопрос помечен как [tag: sql-server-2008] – Andomar

+0

Попробуйте сначала вставить его в Блокнот, а затем скопировать его в SS2008. Я знаю, что это не тот ответ, который вам нужен, но он исключает некоторые необычные работы AI из редактора SS2008. –

ответ

4

Вы можете добавить возврат каретки (ASCII 13) и строки (ASCII 10), как:

SELECT 'SELECT * ' + char(13) + char(10) + 'FROM LIFE' 
+0

Пожалуйста, см. Мое редактирование в вопросе, когда я выполнил ваш запрос. Он по-прежнему возвращал результат в одну строку. –

+1

@ReeyaOberoi: Пробовали ли вы это в текстовом режиме? (menu 'query -> results to -> results to text' или keyboard' ctrl-T') – Andomar

0

Я предлагаю это работает, но SSMS заменяет возврат каретки при копировании его из результирующих ,

Я только что запустил код excel-vba ниже с SQL Server 2008 R2, и текст был напечатан как лист Excel. Чтобы проверить, откройте excel и вставьте процедуру test() в модуль листа в редакторе VBA (alt + f11), а затем вставьте новый модуль (name it dbMngr), а затем вставьте код dbMngr ниже в этот модуль.

EDIT: вам также потребуется включить константу строки подключения в верхней части модуля dbMngr.

Интегрированная система безопасности:

Private Const S_CON As String = "Provider=SQLOLEDB;Data Source=MyServerName;Initial Catalog=MyDB;Integrated Security=SSPI" 

SQL Server Auth:

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 
+0

Спасибо @TehJake за такой подробный ответ, но я думаю, что ответ Андомара сработал для меня. Очень ценю! –

Смежные вопросы