SQL PRINTステートメントは、ユーザー定義メッセージを表示するのに役立ちます。たとえば、T-SQLループを使用してスクリプトを開発していて、ループの各反復で特定のメッセージを表示したいとします。次に、PRINTステートメントを使用できます。または、条件付きステートメントを使用してスクリプトを開発するときに使用できます。その場合、ステートメントによって評価された条件が正しいステップを実行するか、正しい出力を生成することを確認します。 PRINTステートメントを使用して、T-SQLクエリまたはストアドプロシージャのプロセスを追跡したり、カスタマイズされたメッセージを返したりすることもできます。
現在の記事では、次のユースケースに焦点を当てています。
- PRINTステートメントを使用して文字列またはint値を出力します。
- IF…ELSEステートメントでのPRINTの使用。
- WHILEループでのPRINTの使用。
PRINTステートメントの構文は次のとおりです。
Print string | @variable | str_expression
- 文字列 :値は文字またはUnicode文字列にすることができます。
- @variable :文字データ型は、文字またはUnicode文字データ型である必要があります。
- str_expression :値は文字列を返す式にすることができます。リテラル値、文字列関数、変数にすることができます。
PRINTステートメントを使用して特定の値を表示すると、出力はSQL ServerManagementStudioのメッセージペインに返されます。
注: PRINTステートメントは、8000文字の長さの文字列または4000文字の長さのUnicode文字列を表示できます 。長さが8000を超えると、残りの文字列は切り捨てられます。
PRINTステートメントの制限
- PRINT関数は、文字列またはUNICODE文字列を返します。したがって、文字列と整数のデータ型を連結するときに、INT値をcharまたはvarcharデータ型に明示的に変換する必要があります。
- SQLServerプロファイラーはPRINTステートメントをキャプチャしません。
例:文字列値を出力する
Hello、Worldを出力するステートメントを作成するとします。 画面に。 T-SQLは次のようになります。
Print 'Hello World'
出力:
@stringに保存されている値を出力するには 変数の場合、次のコードが必要です:
declare @String varchar(30)
set @String='Hello World'
Print @String
出力:
PRINTステートメントを使用して整数値を出力します
次のT-SQLスクリプトを使用します。
Print 10
出力:
@intvalueの値を出力するには パラメータには、次のT-SQLスクリプトを使用します。 @intvalueのデータ型 は整数です。
declare @IntValue Int
set @IntValue = 10
Print @IntValue
出力:
PRINTステートメントを使用して、基本的な算術関数を実行できます。 2つの値のSUMを実行するとします。これを行うには、2つの数値の間にプラス(+)記号を追加します。
Print 10+10
出力:
PRINTステートメントを使用してカスタムメッセージを印刷する
PRINTステートメントを使用して現在の時刻を印刷するとします。そのために、 @inputstringという名前の2つのSQLPRINT変数を宣言しています。 および@currentdate 。 @inputstringのデータ型 はvarchar(50)、 および@currentdate datetime 。クエリは次のとおりです。
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + @currentdate
出力:
エラーが発生します。このエラーを修正するには、 @currentdateに格納されている値を明示的に変換する必要があります 変数。 T-SQLスクリプトは次のようになります。
declare @inputstring varchar(500)
declare @currentdate datetime
set @inputstring ='The time is '
set @currentdate= (select getdate())
Print @inputstring + convert(varchar,@currentdate,103)
出力:
IF…ELSEステートメントでのPRINTステートメントの使用
それでは、 Hello Worldを印刷してみましょう。 IF…ELSEループで指定された条件に基づきます。条件がTRUEと評価された場合は、 Hello Worldを出力します。 。 FALSEと評価された場合は、 Hello Indiaを印刷します。 。
if (0=0)
print 'Hello World'
else
Print 'Hello India'
出力:
同様に、T-SQL変数に格納されている値を使用して、出力を比較および出力できます。
データベースのステータスをチェックするストアドプロシージャを作成しました。オンラインの場合は、オンラインで印刷されます。それ以外の場合は、ERRORを出力します。 database_idを渡します 入力パラメータとして。
ストアドプロシージャのT-SQLコードは次のとおりです。
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
ストアドプロシージャを実行します:
Exec getDBStatus 5
出力:
それでは、ELSE条件をテストしてみましょう。 @の別の値を使用してストアドプロシージャを実行します databaseID パラメータ:
use master
go
exec getDBStatus 6
出力:
WHILEループでのPRINTステートメントの使用
HelloWorldを10回印刷するとします。次に、WHILEループを使用できます。以下は、helloworldを複数回印刷するためのT-SQLコードです。
Declare @i int =0
declare @iterations int =10
While (@i<@iterations)
Begin
Print 'Hello World'
set @[email protected]+1
End
出力:
次に、すべてのユーザーデータベースのバックアップを生成するT-SQLクエリのスクリプトを開発しましょう。スクリプトの進行状況を表示するには、PRINTステートメントを使用しています。
スクリプトでは、SQLで次の変数を使用します。
- @DBcount ユーザーデータベースの数を保持します。データ型は整数です。
- @i 増分値を保持します。データ型は整数です。
- @DBName データベース名の値を保持します。データ型はvarchar(200)です。
- @SQLCommand バックアップデータベースを保持します 指図。データ型はnvarchar(max)です。
- #Databases 一時テーブルです。ユーザーデータベースの名前を挿入しています。
まず、スクリプトは#データベースという名前の一時テーブルを作成します ユーザーデータベース名を挿入します。
create table #Databases (name varchar(200))
insert into #Databases select name from sys.databases where database_id>4
次に、ユーザーデータベースのカウントを入力し、その値を @DBCountに保存します。 パラメータ:
set @DBCount=(select count(1) from #Databases)
次に、WHILEループがデータベースの名前を設定します。 WHILEループは、 @iの値まで実行されます。 および@DBCount 同等になります。
WHILE (@DBCount>@i)
WHILEループでは、TOP句を使用して、 #Databasesからデータベースの名前を取得します。 テーブルを作成し、 @DBNameに保存します 変数。
Begin
set @DBName=(select top 1 name from #Databases)
その後、動的なT-SQLコマンドが作成されます。 @DBNameの値を設定します 動的SQLのパラメータ。
set @SQLCommand = 'Backup database [' [email protected]+'] to disk =''D:\Backup\' + @DBName +'.bak'''
バックアップデータベースのクエリが正しいことを確認するために、 @SQLCommandを返すPRINTステートメントを追加しました。 可変値。
Print @SQLCommand
次のステートメントは、 @Iの値をインクリメントします @DBName に保存されている名前のレコードを1つずつ削除します 変数。
delete from #Databases where [email protected]
set @[email protected] + 1
End
完全なスクリプトは次のとおりです。
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
スクリプトの出力は次のとおりです。
上記のスクリプトを使用して、すべてのユーザーデータベースをバックアップするための特定のスクリプトを準備できます。
概要
この記事では、SQL ServerでのPRINTステートメントの本質と制限について説明し、実際の例でその使用法を示しました。