2013-04-20 3 views
1

Есть ли способ выполнить запрос в SQL Server, а затем распечатать сообщение, содержащее данные из результатов запроса.Обработка результатов запроса в SQL Server

Например, если у меня был запрос, как это:

SELECT ID, FirstName, LastName FROM Customers 

я хотел бы следовать за ним что-то вроде этого, для каждой строки результатов.

Print N'Customer ID: ' + [ID] 
Print N'First Name: ' + [FirstName] 
Print N'Last Name: ' + [LastName] 

Я знаю, что могу использовать предложение AS для форматирования каждого столбца, но данные будут всегда быть отформатирован в виде таблицы. Есть ли способ отформатировать результаты по-другому, не используя другой язык для обработки результатов?

+0

Вы можете взять его в качестве XML. – MarcinJuraszek

+0

Зачем вам это нужно? Выходные данные PRINT для приложений-клиентов сложнее использовать и замедлять. – RBarryYoung

+0

@RBarryYoung: Я разрабатываю программное обеспечение в течение 26 лет и имею довольно хорошее представление о том, насколько сложно разбирать вывод текста. В этом случае я просто скопирую вывод и вставьте его в электронное письмо. Я понимаю, что мне нужно. Однако большинство моих знаний не в SQL Server. Я могу легко взломать что-то в C#, но было бы очень удобно, если бы SQL Server мог обрабатывать эту несколько тривиальную задачу в простом запросе. –

ответ

2

Вы можете использовать курсор:

declare @curse cursor 
set @curse = cursor fast_forward for 
select ID, FirstName, LastName 
from Customers 

declare @id int, 
     @firstName varchar(32), 
     @lastName varchar(32) 

open @curse 

fetch next from @curse into @id, @firstName, @lastName 

while (@@fetch_status = 0) 
begin 
    Print N'Customer ID: ' + @id 
    Print N'First Name: ' + @firstName 
    Print N'Last Name: ' + @lastName 

    fetch next from @curse into @id, @firstName, @lastName 
end 

close @curse 

Или вы могли бы сделать это без:

select 'Customer ID: ' + cast(ID as varchar(32)) + char(13) + char(10) + 
     'First Name: ' + FirstName + char(13) + char(10) + 
     'Last Name: ' + LastName + char(13) + char(10) 
from Customers 

Использование Ctrl + T изменить выход в SSMS из режима Grid to Text, если вы используете этот второй способ.

+0

Интересно. Не очень знакомы с курсорами, но, похоже, это именно то, что мне нужно. –

+0

@muhmud Просто записка Мне пришлось улыбнуться на '@ curse', потому что это действительно может быть проклятием :) – YvesR

+0

Очень верно :) Следовательно, я добавил также путь без курсора. – muhmud

1

Вы можете попробовать это:

DECLARE @customerid varchar(100); 
DECLARE @firstname varchar(100); 
DECLARE @@lastname varchar(100); 

SELECT @customerid=ID, @firstname=FirstName, @lastname=LastName 
FROM Customers 

Print N'Customer ID: ' + @customerid 
Print N'First Name: ' + @firstname 
Print N'Last Name: ' + @lastname 
+0

Спасибо. Правильно ли, что в случае запроса, возвращающего несколько результатов, будет напечатан только последний результат? –

+0

Да, в этом случае только последний, как var, перезаписывается. – YvesR

+0

Если вам нужно сделать это на нескольких строках, вам нужен курсор и сделайте это для каждой строки – YvesR

0

Если все, что вам нужно, это вертикальное форматирование данных, то я бы еще рекомендовал использовать ВЫБРАТЬ над PRINT:

SELECT Lbl, Txt 
FROM (
       SELECT ID, 'Customer ID:' As Lbl, CAST(ID As VARCHAR(50)) As Txt  FROM Customers 
    UNION ALL SELECT ID, 'First Name:' As Lbl, CAST(FirstName As VARCHAR(50)) As Txt FROM Customers 
    UNION ALL SELECT ID, 'Last Name:' As Lbl, CAST(FirstName As VARCHAR(50)) As Txt FROM Customers 
    ) A 
ORDER BY ID, Lbl