2012-02-27 17 views
0

テーブルが10個あり、各テーブルのレコード数を示す簡単なLOGエントリを作成する必要があります。TSQL - Count(*)..をVarchar変数に選択

Declare @msg Varchar(MAX) 
Set @msg = 'Process Succeeded; Table1 has xx record, Table2 has zz records, Table3 has ww records ...' 

Insert INTO LOG (msg) VALUES (@msg) 
+1

質問は何ですか? –

答えて

10

かにそれをロールアップ:

declare @Summary as VarChar(256) 
select @Summary = 
    'Foo: ' + Cast((select Count(42) from Foo) as VarChar(10)) + 
    ', Bar: ' + Cast((select Count(42) from Bar) as VarChar(10)) 
select @Summary 
2

よう

何かがSQL Serverが現在string.Formatのようなもののためにあらゆるサポートを持っていないので、あなたがしなければならない。

DECLARE @msg VARCHAR(MAX) 

DECLARE @Table1Count INT 
SELECT @Table1Count = COUNT(*) FROM dbo.Table1 

DECLARE @Table2Count INT 
SELECT @Table2Count = COUNT(*) FROM dbo.Table2 

..... and so forth for each table you want to consider 

SET @msg = 'Process Succeeded; ' + 
    'Table1 has ' + CAST(@Table1Count AS VARCHAR(10)) + ' rows, ' + 
    'Table2 has ' + CAST(@Table2Count AS VARCHAR(10)) + ' rows...' + ........ 

Insert INTO LOG (msg) VALUES (@msg) 

を今、SQL Serverで、これは苦痛ですそのため、これらのカウントをフロントエンドのアプリに戻し、そこに書式設定とログを書き込むほうがずっと簡単かもしれません。

SQL Server 2012 will have a FORMAT function(長年の懸案!)

+0

来る機能について聞いてよかった....ありがとう。 –

1

はもちろん

Declare @msg Varchar(2000) 
,@table1count varchar (100) 
,@table2count varchar (100) 

Select @table1count= cast(count(*) as varchar (100)) from table1 

Select @table2count= cast(count(*) as varchar (100)) from table2 

Set @msg = 'Process Succeeded; Table1 has '[email protected] +' records, Table2 has '[email protected]+' records, ...' 

Insert INTO LOG (msg) VALUES (@msg) 

試してみてください私はあなたの最初の2つのテーブルを与え、あなたは残りのTEH同じtechiniqueを使用することができます。

+0

WOW!カウントを保持するために 'varchar(100) 'が必要な場合、あなたのテーブルはどれくらい大きいですか? :-) –

+1

私はちょうどそれをやっていた。私の応答の元々のvarchar(最大) – HLGEM

+0

に実際には..私はまだそれについて笑っている(hehe) –

関連する問題