在SQL Server中处理查询结果
问题描述:
是否有任何方法在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
子句每一列的格式,但数据总是在一个表进行格式化。有没有什么方法可以对结果进行不同的格式化,而无需使用其他语言来处理结果?
答
你可以使用光标:
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。
答
你可以试试这个:
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
答
如果你需要的是数据的垂直格式,那么我还是推荐在打印使用SELECT:
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
你可以把它当作XML。 – MarcinJuraszek 2013-04-20 15:11:49
你为什么要这样做? PRINT输出对于客户端应用程序消耗和减慢很困难。 – RBarryYoung 2013-04-20 15:13:08
@RBarryYoung:我已经开发了26年的软件,并且很好地掌握了解析文本输出的难度。在这种情况下,我将简单地复制输出并将其粘贴到电子邮件中。我清楚我需要什么。但是,我的大部分专业知识不在SQL Server中。我可以轻松地在C#中创建一些东西,但如果SQL Server能够在简单的查询中处理这个有点琐碎的任务,那将会非常方便。 – 2013-04-20 15:18:01