有没有办法在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 :(得分: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中的输出从网格更改为文本模式。
答案 1 :(得分: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
答案 2 :(得分:0)
如果您只需要垂直格式化数据,那么我仍然建议使用SELECT over 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