SQLAzureのメモ,Tips

1、開発、もしくはテストには必ずUSAバージョンの、OSとSQLServerで行うべき。文字化けを見つけるために。
R2のManagementStudio付属のこいつを使えば、SQL AzureにもManagementStudioを接続し操作できる。暗号化接続で接続すること。

SQLSERVER 2008 R2 Express with AdvancedService

2、日本語文字の列はNVARCHAR。デフォルトの並び順はSQL_LATIN1_GENERAL_CP1_CI_ASだが、日本語標準はJAPANESE_CI_AS。しかし、混在させるには注意。


ex, NM [NVARCHAR](30) COLLATE JAPANESE_CI_AS NOT NULL,
3、WEB(IIS)はUTF8にすれば森鷗外(環境依存文字)も表示できる。web.configを設定。


...


4、日本語が使用される文字には、Nのプリフィックスをつける
ex, '日本語' -> N'日本語'

5、DATENAME(MM, GETDATE())は'April'を返すので、RIGHT('0'+CAST(DATEPART(MM,GETDATE()) AS VARCHAR),2)へ。
ex, 'April' -> '04'


CREATEFUNCTION [dbo].[FN_MM]
(@DT DATETIME)
RETURNS VARCHAR(2)
AS
BEGIN
-- MMを返す
RETURN RIGHT('0'+CAST(DATEPART(MM,@DT) AS VARCHAR),2)
END
6、GETDATE()は現地時間を返すので、UTC+9を使用する。

CREATE FUNCTION [dbo].[FN_GETDATE]
()
RETURNS DATETIME
AS
BEGIN
-- 日本時間を返す
RETURN DATEADD(HOUR,9,GETUTCDATE())
END
5、仕様のため、なぜかSELECT INTO構文が使えない。

6、5分を超えるの処理は切断されるかもしれない。noteのfive minutes

7、日本語訳、SQL Azureガイドラインと制限事項

8、RAISERROR( N'[エラーメッセージ]',15,-1 ) WITH LOG ,WITH LOGは使えない

9、テーブルには必ず、クラスタードのプライマリーキーが必要。なくてもテーブルは作成できるが、データ挿入時にエラーになる。


仕方なく、プライマリキーを付ける記述
ALTER TABLE [TABENAME] ADD [IDX] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED (IDX)
10、この問題は深刻。列単位のCOLLATEの変更ではストアドの修正確認が大変すぎる。量的にできないかもしれない。データベース単位でCOLLATEを変更できないのが痛い。

"Japanese_CI_AS"と"SQL_Latin1_General_CP1_CI_AS"を混在させたら、やっかいな問題に遭遇した。

1、ストアド作成中でエラーが発生。COLLATEの設定の違う列の比較ができない。
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Japanese_CI_AS" in the equal to operation.

2、Viewの作成でエラー。COLLATEの設定の違う列の合成ができない。
Cannot resolve collation conflict for column 1 in SELECT statement.

3、1と2を同時に解決するうまい方法がない。

11、SQLServer上ですらデータベースのCOLLATEが違うと、データベース間のデータのコピーもままならない。
"SQL_Latin1_General_CP1_CI_AS" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。
(詳しくはhttp://bit.ly/bB1e2M)