2010年9月16日木曜日

SQL Server 2008 -varcharとnvarcharの違い-

僕は nvarchar を使わないのですが、違いはこんな感じです。

varchar :バイト数
nvarchar :文字数


例えば、フィールドに格納できる最大のデータは以下のようになります。
varchar(10)  : あいうえお
nvarchar(10) : あいうえおかきくけこ
※上は10バイトで下は10文字。

パフォーマンス的にどっちがいいとかあるのだろうか。
会社の後輩に聞かれたので、一応メモメモしときます。

2010年9月13日月曜日

Reporting Services -カスタムコードで色を変える-

パーセンテージに応じてグラフやセルの色を変える際などに利用するカスタムコード。
サンプルは100以上は「コーンフラワーブルー」、80~100は「ライム」、80以下は「レッド」で表示します。

Public Function Get_Color(iRate As Integer) As Object
If iRate >= 100 Then
Return "CornflowerBlue"
ElseIf iRate < 80 Then
Return "Red"
Else
Return "Lime"
End If
End Function

IIF関数でも代用可能ですが、カスタムコードを使った方がやっぱりスッキリします。

2010年9月10日金曜日

SQL Server 2008 -Error: データが切り捨てられる-

INSERT処理で「文字列データまたはバイナリ データが切り捨てられます。」エラーが発生。

【原因】
INSERT先のフィールド桁数よりINSERT元の値の桁数のほうが大きい場合に発生する。
INSERT先のフィールド桁数を増やして実行。そして問題なし。

「切捨て」というエラーが出たら、基本的に「桁数が足りないんだなぁ」と考えればいいと思われる。

ASP.NET -メールフォーム(添付ファイル機能付)の作成-

1.メールフォームレイアウト
送信者[ TextBox1 ]
宛先 [ TextBox2 ]
件名 [ TextBox3 ]
本文 [ TextBox4 ]

添付 [FileUpload][参照ボタン]

[Button1] 送信ボタン


2.FileUpload コントロールの設置

<asp:FileUpload ID="FileUpload1" runat="server" />
※<form>~</form>の間に記述

3.ボタンクリックイベント

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1_Click
Dim MailFrom As String
Dim MailTo As String
Dim MailSubject As String
Dim MailBody As String
Dim posted As HttpPostedFile = Request.Files("FileUpload1")

MailFrom = TextBox1.Text '送信アドレス
MailTo = TextBox2.Text '宛先アドレス
MailSubject = TextBox3.Text '件名
MailBody = TextBox4.Text '本文

'MailMessageの作成
Dim msg As New System.Net.Mail.MailMessage()
'送信者
msg.From = New System.Net.Mail.MailAddress(MailFrom, "")
'宛先
msg.To.Add(New System.Net.Mail.MailAddress(MailTo, ""))
'件名
msg.Subject = MailSubject
'本文
msg.Body = MailBody
'添付
msg.Attachments.Add(New Attachment(posted.InputStream, _
System.IO.Path.GetFileName(posted.FileName), posted.ContentType))

Dim sc As New System.Net.Mail.SmtpClient()
'SMTPサーバーを指定する
sc.Host = "localhost"
'メッセージを送信する
sc.Send(msg)

'後始末
msg.Dispose()

End Sub

SQL Server 2008 -CSVデータを取り込む-

[要件]
・某システムからエクスポートされたCSVデータを、SQLServerのテーブルに取り込みたい。
・CSVとテーブルのレイアウト(項目数)は異なる。
・毎日、夜間に自動で更新したい。

さぁ、どうしようか。。

[方法]
下記のようなストアドプロシージャを作成して、SQLServer Management Studioのジョブで起動してます。

CREATE TABLE #temp( test1 varchar(10),test2 varchar(10),test3 varchar(10),test4 int)

TRUNCATE TABLE TEST_1

BULK INSERT #temp
FROM 'C:\Temp\hogehoge.CSV'
WITH(
DATAFILETYPE='char'
,FIELDTERMINATOR=','
,ROWTERMINATOR='\n')

select * from #Temp
INSERT INTO Test_1( test1,test3)
SELECT test1,test3 FROM #temp

drop table #temp

まだテスト段階ですが・・

Reporting Services -累計データの表示-

該当するフィールドの式に下記コードを記述する。
【コード】
=RunningValue(Fields!受注金額.Value, Sum,Nothing)
第1引数:累積したいフィールド、第2引数:集計関数、第3引数:スコープ

こんな感じで累計値を取得できます。累計グラフで重宝してます。
↓ ↓ ↓ ↓ ↓ ↓

受注金額 累計
10   10
50   60
20    80
30   110
10   120

Reporting Services -テーブル行を1行ごとに色分けしたい-

①色分けしたいセルを選択して、プロパティを表示する。(画面右側)
②Backgroundcolor に下記内容を記述。
 =IIF( RowNumber(Nothing) Mod 2, "LightYellow", "White" )

サンプルでは、1行ごとに「ライトイエロー」「ホワイト」で色分けされます。

Reporting Services -除算エラー回避-

①レポートのプロパティより、コードを選択する。
 ※「レポートのプロパティ」はレポートの何もない所(背景青色部分)を右クリックして表示します
②右側のカスタムコード欄に下記コードを入力

Public Function Josan(ByVal Bunbo, ByVal Bunshi) As Object
 If IsNothing(Bunbo) Or IsNothing(Bunshi) Then
  Return Nothing
 ElseIf Bunbo = 0 Or Bunshi = 0 Then
  Return Nothing
 Else
  Return Bunshi / Bunbo
 End If
End Function

③呼び出し方法は下記の通り。
 =Code.Josan(Sum(Fields!分母.Value), Sum(Fields!分子.Value)

ちなみに、式でIIF関数を使っても可能ですが、カスタムコードを使ったほうがスッキリします。

Reporting Services -グラフ軸のタイトルの向きを変える-

①軸タイトルを選択し、グラフ軸のプロパティを表示する(画面右)。
②「タイトル」にある[TitleTextOrientation] を変更する。

※縦表示にする場合は 「Stacked」を選択