簡體   English   中英

將Access SQL查詢轉換為SqlServer

[英]Converting Access SQL Queries to SqlServer

我已經完成了將訪問表,查詢,宏和報表的DOZENS轉換為SQL Server的任務,到目前為止,它的發展還很糟糕。

例如這樣的:

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;

雖然我以前見過SQL代碼(主要是mysql),但從未見過[Numbers by Quarter and Bedsize].SizeCategory

有什么好的教程可以將Access SQL轉換為SQLServer? 請注意,我之前從未真正接觸過Access或SqlServer。

我從未見過像[Numbers by Quarter and Bedsize] .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;

表格名稱周圍的方括號是帶引號的標識符。 在Standard SQL中,帶引號的標識符是雙引號( " )。Access數據庫引擎(ACE,Jet,無論如何)均不符合SQL標准,並使用方括號。SQLServer可以使用標准方括號和專有方括號作為引用標識符。

如果數據元素否則是非法的(例如包含空格或非空格字符或以空格開頭),則訪問需要帶引號的標識符。 通過示例構建器進行的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中的行為是不同的。 您將面臨的挑戰之一是Access的文檔非常差,例如,Access幫助或Microsoft的其他任何官方文檔中都沒有提到我剛才關於部門划分的斷言。 我必須通過反復試驗自己弄清楚。

我建議您在Access和SQL Server中都編寫全面的測試,以確保移植的SQL不會導致更改的行為。

您正在做的事情似乎不需要完全手動完成...

您是否考慮過使用免費的Microsoft SQL Server遷移助手(SSMA)從Access到MS SQL Server 2008進行“升級”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM