2011-12-19 10 views
2

へのアクセスSQLクエリを変換する私はSQL Serverへのアクセスのテーブル、クエリ、マクロ、およびレポートの数十を変換してもそのこれまで恐ろしい行くのタスクを与えられてきました。例えばこのようのSQLServer

:私は[Numbers by Quarter and Bedsize].SizeCategory

ようなものを見たことがありません

SELECT [Numbers by Quarter and Bedsize].SizeCategory, 
[Numbers by Quarter and Bedsize].Bedsize, 
[Numbers by Quarter and Bedsize].[SumOfNumber of CLABSI], 
[Numbers by Quarter and Bedsize].[SumOfCentral Line Days], 
Round(1000*[Numbers by Quarter and Bedsize].[SumOfNumber of CLABSI]/[Numbers by Quarter and Bedsize].[SumOfCentral Line Days],2) AS [State CLABSI Rate], 
[Numbers by Quarter and Bedsize].SummaryYQ 
FROM [Numbers by Quarter and Bedsize] 
ORDER BY [Numbers by Quarter and Bedsize].SizeCategory, [Numbers by Quarter and Bedsize].SummaryYQ; 

私は(ほとんどのMySQL)の前にSQLコードを見てきた一方では、へのアクセスSQLを変換するために何か良いチュートリアルはありますSQLサーバー?私は実際にはAccessまたはSqlServerのいずれかに触れていないことに注意してください。

+1

この特定のケースでは、[Numbers by QuarterとBedsize]はクエリまたはテーブルにすぎません。私の推測はクエリーです。ビューに変換された場合、この「1つ」の問題は解決されます。翻訳の順序:すべてのテーブルを移動し、すべてのクエリをビューに移動します。すべてのマクロを関数/ストアドプロシージャに移動します。置き換えるために使用するレポートエンジンを特定し、アクセスレポートのSQLをビューにコピーしてそこから作成するか、Accessをフロントエンドとして引き続き使用する場合は、ビューをアクセスにリンクして、代わりにリンクされたビューを作成してください。 – xQbert

答えて

3

.SizeCategory

これは、ドット修飾名の一例です。ドットの左側の要素は相関名です。 from節に明示的な相関名を指定しないと、表名と等しいデフォルトの相関名が仮定されます。例

SELECT [Numbers by Quarter and Bedsize].SizeCategory 
    FROM [Numbers by Quarter and Bedsize]; 

について...実際として解析されます。

SELECT [Numbers by Quarter and Bedsize].SizeCategory 
    FROM [Numbers by Quarter and Bedsize] AS [Numbers by Quarter and Bedsize]; 

あなたは相関名が正しくないですが、悲しいことに、お国言葉になっていた「エイリアス」と呼ばれる表示されます。

おそらくそれが読み取るためのコードを容易にする短い相関名は、例えば選択され

SELECT n.SizeCategory 
    FROM [Numbers by Quarter and Bedsize] AS n; 

テーブル名の前後の角かっこは、識別子の引用符で囲まれています。標準SQLでは、引用符で囲まれた識別子は二重引用符(")です。 Accessデータベースエンジン(ACE、Jetなど)は、SQL標準に準拠せず、角括弧を使用します。 SQL Serverでは、StandardとProprietaryの角括弧の両方を引用符付きの識別子として使用できます。データ要素が他の違法例えばあろう場合

アクセスは引用符で囲まれた識別子を必要としスペースまたはアルファベット以外の文字が含まれています。サンプルのBuilderによるAccessクエリは、実際に必要であるかどうかにかかわらず、すべてのデータ要素名を引用符で囲んだ識別子を追加する傾向があります。

テーブル名Numbers by Quarter and Bedsizeは、スペースの存在による引用符識別子が必要です。ポートをデータ要素の名前を変更する機会として利用することをお勧めします。 (私が選んだ名前の一般的な質に疑問を呈している)完全な改訂はおそらく間にありますが、いくつかの「ぶら下がっている果物」はスペース文字をアンダースコアに置き換える機会になります。

上記のアドバイスに続いて、いくつかの書式設定を追加して、クエリはなる:

SELECT n.SizeCategory, 
     n.Bedsize, 
     n.SumOfNumber_of_CLABSI, 
     n.SumOfCentral_Line_Days, 
     Round(1000 * n.SumOfNumber_of_CLABSI/n.SumOfCentral_Line_Days, 2) 
      AS State_CLABSI_Rate, 
     n.SummaryYQ 
    FROM Numbers_by_Quarter_and_Bedsize AS n 
    ORDER 
    BY SizeCategory, SummaryYQ; 

もちろん、ポートは、構文の変更を伴うだろうが、あなたはまた、行動の変化を探してください。たとえば、値がDECIMALの場合、Access SQLの除算はFLOATになります。この場合、結果はDECIMALです。 SQL Serverの動作は異なります。あなたが直面する課題の1つは、アクセスのための非常に貧弱なドキュメントです。私がちょうど分割について行った主張は、Accessヘルプやマイクロソフトの他の公式文書には記載されていません。私は試行錯誤して自分自身でそれを理解しなければならなかった。

ポートとSQLの両方で包括的なテストを作成して、移植されたSQLの動作が変更されないようにすることをお勧めします。

+0

+1まったくの努力のために.... – Simon

+0

それは私が必要とするものとほぼ同じです、私はそれが私をたくさん助けてくれると思います。ありがとう! – rugbert

1

何がやっていることは、手によって完全に行われる必要があるだろう事のタイプのように見えるしていません...

はあなたがMS SQL Server 2008にAccessから「アップサイズ」にthe free Microsoft SQL Server Migration Assistant (SSMA)を使用して考えがあります?私は、[四半期とBedsizeによって数字]のようなものを見たことがない

+0

助けてもらえれば、クエリの約40%は手作業で変換する必要があります。ありがとう! – rugbert