Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tổng quan về câu lệnh PRINT trong SQL Server

Câu lệnh SQL PRINT dùng để hiển thị thông báo do người dùng xác định. Ví dụ:bạn đang phát triển một tập lệnh với Vòng lặp T-SQL và bạn muốn hiển thị một số thông báo cụ thể trên mỗi lần lặp lại của vòng lặp. Sau đó, bạn có thể sử dụng câu lệnh PRINT. Hoặc, bạn có thể sử dụng nó khi phát triển một tập lệnh với các câu lệnh điều kiện. Trong trường hợp đó, bạn đảm bảo rằng điều kiện được đánh giá bởi câu lệnh thực hiện đúng bước hoặc tạo ra kết quả chính xác. Câu lệnh PRINT cũng có thể được sử dụng để theo dõi quá trình của truy vấn T-SQL hoặc một thủ tục được lưu trữ hoặc để trả lại thông báo tùy chỉnh.

Bài viết hiện tại tập trung vào các trường hợp sử dụng sau:

  1. In một chuỗi hoặc giá trị int bằng Câu lệnh IN.
  2. Sử dụng PRINT trong câu lệnh IF… ELSE.
  3. Sử dụng PRINT trong WHILE Loop.

Cú pháp của câu lệnh PRINT như sau:

Print string | @variable | str_expression
  • chuỗi :Giá trị có thể là một ký tự hoặc chuỗi Unicode.
  • @variable :Kiểu dữ liệu ký tự phải là kiểu dữ liệu ký tự hoặc ký tự Unicode.
  • str_expression :giá trị có thể là một biểu thức trả về một chuỗi. Nó có thể là một giá trị chữ, hàm chuỗi và biến.

Khi chúng tôi sử dụng câu lệnh PRINT để hiển thị giá trị cụ thể, kết quả trả về trong ngăn thông báo của SQL Server Management studio.

Lưu ý: Câu lệnh PRINT có thể hiển thị chuỗi dài 8000 ký tự hoặc chuỗi Unicode dài 4000 ký tự . Nếu độ dài vượt quá 8000, chuỗi còn lại sẽ bị cắt ngắn.

Hạn chế của câu lệnh PRINT

  1. Hàm PRINT trả về một chuỗi ký tự hoặc chuỗi ký tự UNICODE. Do đó, trong khi nối kiểu dữ liệu chuỗi và dữ liệu Số nguyên, chúng ta phải chuyển đổi rõ ràng giá trị INT thành kiểu dữ liệu char hoặc varchar.
  2. Trình biên dịch SQL Server không nắm bắt được các câu lệnh PRINT.

Ví dụ:In giá trị chuỗi

Giả sử bạn muốn viết một câu lệnh in Hello, World lên màn hình. T-SQL phải như sau:

Print 'Hello World'

Đầu ra:

Để in giá trị được lưu trữ trong @string biến, chúng tôi cần mã sau:

declare @String varchar(30)
set @String='Hello World'
Print @String

Đầu ra:

In giá trị Số nguyên bằng câu lệnh PRINT

Sử dụng tập lệnh T-SQL sau:

Print 10

Đầu ra:

Để in giá trị của @intvalue , hãy sử dụng tập lệnh T-SQL sau. Loại dữ liệu của @intvalue là một số nguyên.

declare @IntValue Int
set @IntValue = 10
Print @IntValue

Đầu ra:

Bạn có thể thực hiện các chức năng số học cơ bản bằng cách sử dụng câu lệnh PRINT. Giả sử bạn muốn thực hiện SUM của hai giá trị. Bạn có thể làm điều đó bằng cách thêm dấu cộng (+) vào giữa hai giá trị số:

Print 10+10

Đầu ra:

In thông báo tùy chỉnh bằng cách sử dụng câu lệnh PRINT

Giả sử bạn muốn in thời gian hiện tại bằng cách sử dụng câu lệnh PRINT. Để làm điều đó, chúng tôi đang khai báo hai biến SQL PRINT có tên @inputstring @currentdate . Loại dữ liệu của @inputstring varchar (50), @currentdate ngày giờ . Truy vấn như sau:

declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate

Đầu ra:

Một lỗi xảy ra. Để khắc phục lỗi này, chúng tôi phải chuyển đổi rõ ràng giá trị được lưu trữ trong @currentdate Biến đổi. Tập lệnh T-SQL phải như sau:

declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)

Đầu ra:

Sử dụng câu lệnh PRINT trong câu lệnh IF… ELSE

Bây giờ, hãy để chúng tôi in Hello World dựa trên điều kiện được chỉ định trong vòng lặp IF… ELSE. Nếu điều kiện cho kết quả là TRUE, sau đó in Hello World . Nếu nó cho kết quả là FALSE, thì hãy in Xin chào Ấn Độ .

if (0=0)
print 'Hello World'
else 
Print 'Hello India'

Đầu ra:

Tương tự, bạn có thể sử dụng các giá trị được lưu trữ trong biến T-SQL để so sánh và in kết quả đầu ra.

Tôi đã tạo thủ tục được lưu trữ để kiểm tra trạng thái của cơ sở dữ liệu. Nếu nó là trực tuyến, nó in ONLINE. Khác, nó in LỖI. Tôi đang chuyển database_id như một tham số đầu vào.

Mã T-SQL của thủ tục được lưu trữ như sau:

create procedure getDBStatus
@DatabaseID int 
as
begin
declare @DBStatus varchar(20)
set @DBStatus=(select state_desc from sys.databases where [email protected])
if @DBStatus='ONLINE'
Print ' Database is ONLINE'
else
Print 'Database is in ERROR state.'
End

Thực hiện thủ tục đã lưu trữ:

Exec getDBStatus 5

Đầu ra:

Bây giờ, chúng ta hãy kiểm tra điều kiện ELSE. Chạy thủ tục được lưu trữ bằng cách sử dụng một giá trị khác của @ databaseID tham số:

use master
go
exec getDBStatus 6

Đầu ra:

Sử dụng Câu lệnh IN trong vòng lặp WHILE

Giả sử bạn muốn in Hello World 10 lần. Sau đó, bạn có thể sử dụng vòng lặp WHILE. Dưới đây là mã T-SQL để in hello world nhiều lần:

Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End

Đầu ra:

Bây giờ, chúng ta hãy phát triển tập lệnh cho truy vấn T-SQL tạo bản sao lưu của tất cả cơ sở dữ liệu người dùng. Để xem tiến trình tập lệnh, chúng tôi đang sử dụng câu lệnh PRINT.

Trong tập lệnh, chúng tôi sẽ sử dụng var sau trong SQL:

  1. @DBcount nắm giữ số lượng cơ sở dữ liệu người dùng. Kiểu dữ liệu là một số nguyên.
  2. @i giữ các giá trị gia tăng. Kiểu dữ liệu là một số nguyên.
  3. @DBName giữ giá trị của tên cơ sở dữ liệu. Kiểu dữ liệu là varchar (200).
  4. @SQLCommand giữ Cơ sở dữ liệu sao lưu yêu cầu. Kiểu dữ liệu là nvarchar (max).
  5. # Cơ sở dữ liệu là một bảng tạm thời. Chúng tôi đang chèn tên của cơ sở dữ liệu người dùng.

Đầu tiên, tập lệnh tạo một bảng tạm thời có tên # Cơ sở dữ liệu và chèn tên cơ sở dữ liệu người dùng vào đó.

create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4

Sau đó, nó điền số lượng cơ sở dữ liệu người dùng và lưu giá trị trong @DBCount tham số:

set @DBCount=(select count(1) from #Databases)

Tiếp theo, vòng lặp WHILE điền tên của Cơ sở dữ liệu. Vòng lặp WHILE thực thi cho đến khi các giá trị của @i @DBCount trở nên tương đương.

WHILE (@DBCount>@i)

Trong vòng lặp WHILE, chúng tôi sử dụng mệnh đề TOP để lấy tên của Cơ sở dữ liệu từ # Cơ sở dữ liệu và lưu nó trong @DBName biến.

Begin
set @DBName=(select top 1 name from #Databases)

Sau đó, một lệnh T-SQL động được tạo. Nó đặt giá trị của @DBName trong SQL động.

set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''

Để xác minh rằng truy vấn cơ sở dữ liệu sao lưu là chính xác, chúng tôi đã thêm câu lệnh PRINT trả về @SQLCommand giá trị biến đổi.

Print @SQLCommand

Câu lệnh tiếp theo tăng giá trị của @I từng người một và xóa bản ghi có tên được lưu trữ trong @DBName biến.

delete from #Databases where [email protected]
set @[email protected] + 1
End

Tập lệnh đầy đủ như sau:

set nocount on
declare @DBCount int
declare @i int =0
declare @DBName varchar(200)
declare @SQLCommand nvarchar(max)
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4 
set @DBCount=(select count(1) from #Databases)
WHILE (@DBCount>@i)
Begin
set @DBName=(select top 1 name from #Databases)
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''
Print @SQLCommand
delete from #Databases where [email protected]
set @[email protected] + 1
End
drop table #Databases

Đầu ra tập lệnh là bên dưới:

Chúng tôi có thể sử dụng tập lệnh trên để chuẩn bị tập lệnh cụ thể để sao lưu tất cả cơ sở dữ liệu người dùng.

Tóm tắt

Bài viết giải thích bản chất và hạn chế của câu lệnh PRINT trên SQL Server và minh họa cách sử dụng của nó bằng các ví dụ thực tế.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về Từ đồng nghĩa trong SQL Server

  2. Thứ tự của câu lệnh SQL Select không có mệnh đề Order By

  3. Cách khắc phục “Tùy chọn cấu hình‘ Agent XPs ’không tồn tại” trong SQL Server (T-SQL)

  4. Cách tốt nhất để cắt bớt ngày trong SQL Server là gì?

  5. Tổng quan về câu lệnh PRINT trong SQL Server