當前位置:首頁 » 數據倉庫 » sqlserver資料庫方言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver資料庫方言

發布時間: 2022-08-01 20:30:49

『壹』 資料庫語言有哪些

資料庫語言最常用的是sql
(結構化查詢語言)。
t-sql
是微軟SQL
SERVER的SQL語句,兼容SQL,並具有SQL
SERVER本身獨有的函數、關鍵字;
pl/sql是針對Oracle資料庫的第三方工具;
k-sql是國內最領先ERP廠商金蝶軟體自主使用的sql語言。
都是基於sql的,兼容sql,也有符合自己資料庫的特色。可以這么理解,SQL是普通話,而t-sql、pl/sql、ksql是方言。
企業比較常用的大型資料庫有Oracle
(甲骨文)、db2(IBM)
、sql
server(微軟)
、Sybase(剛被sap收購)、Mysql(sun,已被甲骨文收購)Mysql也算大型資料庫。

型資料庫有access、MSDE
2000、FoxPro(原名foxbase曾是狐狸公司的)等,這三個都是微軟的。foxpro是一款非常方便好用的桌面資料庫開發工具,至今還有很多
公司用來做數據處理。其他還有些我不熟悉的,就不寫了。了解這么多資料庫沒用,關鍵是學會用一兩種就行了。
了解更多開源相關,去LUPA社區看看吧。

『貳』 誰能告訴我資料庫的有關知識

什麼是資料庫?

資料庫是以某種文件結構存儲的一系列信息表,這種文件結構使您能夠訪問這些表、選擇表中的列、對表進行排序以及根據各種標准選擇行。資料庫通常有多個 索引與這些表中的許多列相關聯,所以我們能盡可能快地訪問這些表。

以員工記錄為例,您可以設想一個含有員工姓名、地址、工資、扣稅以及津貼等內容的表。讓我們考慮一下這些內容可能如何組織在一起。您可以設想一個表包含員工姓名、地址和電話號碼。您希望保存的其它信息可能包括工資、工資范圍、上次加薪時間、下次加薪時間、員工業績評定等內容。

這些內容是否應保存在一個表格中?幾乎可以肯定不應該如此。不同類別的員工的工資范圍可能沒有區別;這樣,您可以僅將員工類型儲存在員工記錄表中,而將工資范圍儲存在另一個表中,通過類型編號與這個表關聯。考慮以下情況:

Key Lastname SalaryType SalaryType Min Max
1 Adams 2 1 30000 45000
2 Johnson 1 2 45000 60000
3 Smyth 3 3 60000 75000
4 Tully 1
5 Wolff 2

SalaryType 列中的數據引用第二個表。我們可以想像出許多種這樣的表,如用於存儲居住城市和每個城市的稅值、健康計劃扣除金額等的表。每個表都有一個主鍵列(如上面兩個表中最左邊的列)和若干數據列。在資料庫中建立表格既是一門藝術,也是一門科學。這些表的結構由它們的範式指出。我們通常說表屬於1NF、2NF 或 3NF。

第一範式:表中的每個表元應該只有一個值(永遠不可能是一個數組)。(1NF)

第二範式:滿足 1NF,並且每一個非主鍵列完全依賴於主鍵列。這表示主鍵和該行中的剩餘表元之間是 1 對 1 的關系。(2NF)

第三範式:滿足 2NF,並且所有非主鍵列是互相獨立的。任何一個數據列中包含的值都不能從其他列的數據計算得到。(3NF)

現在,幾乎所有的資料庫都是基於「第三範式 (3NF)」創建的。這意味著通常都有相當多的表,每個表中的信息列都相對較少。

從資料庫中獲取數據

假設我們希望生成一個包含員工及其工資范圍的表,在我們設計的一個練習中將使用這個表。這個表格不是直接存在在資料庫中,但可以通過向資料庫發出一個查詢來構建它。我們希望得到如下所示的一個表:

Name Min Max
Tully $30,000.00 $45,000.00
Johnson $30,000.00 $45,000.00
Wolff $45,000.00 $60,000.00
Adams $45,000.00 $60,000.00
Smyth $60,000.00 $75,000.00

我們發現,獲得這些表的查詢形式如下所示

SELECT DISTINCTROW Employees.Name, SalaryRanges.Min,
SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey
ORDER BY SalaryRanges.Min;

這種語言稱為結構化查詢語言,即 SQL,而且它是幾乎目前所有資料庫都可以使用的一種語言。SQL-92 標准被認為是一種基礎標准,而且已更新多次。

資料庫的種類

PC 上的資料庫,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。

資料庫伺服器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。

所有這些資料庫產品都支持多種相對類似的 SQL 方言,因此,所有資料庫最初看起來好象可以互換。每種資料庫都有不同的性能特徵,而且每一種都有不同的用戶界面和編程介面。

ODBC

如果我們能夠以某種方式編寫不依賴於特定廠商的資料庫的代碼,並且能夠不改變自己的調用程序即可從這些資料庫中得到相同的結果,那將是一件很好的事。如果我們可以僅為所有這些資料庫編寫一些封裝,使它們具有相似的編程介面,這種對資料庫編程獨立於供應商的特性將很容易實現。
什麼是 JDBC?

JDBC 是對 ODBC API 進行的一種面向對象的封裝和重新設計,它易於學習和使用,並且它真正能夠使您編寫不依賴廠商的代碼,用以查詢和操縱資料庫。盡管它與所有 Java API 一樣,都是面向對象的,但它並不是很高級別的對象集.

除 Microsoft 之外,多數廠商都採用了 JDBC,並為其資料庫提供了 JDBC 驅動程序;這使您可輕松地真正編寫幾乎完全不依賴資料庫的代碼。另外,JavaSoft 和 Intersolv 已開發了一種稱為 JDBC-ODBC Bridge 的產品,可使您連接還沒有直接的 JDBC 驅動程序的資料庫。支持 JDBC 的所有資料庫必須至少可以支持 SQL-92 標准。這在很大程度上實現了跨資料庫和平台的可移植性。

安裝和使用 JDBC

JDBC 的類都被歸到 java.sql 包中,在安裝 Java JDK 1.4時會自動安裝。然而,如果您想使用 JDBC-ODBC 橋。JDBC-ODBC 驅動程序可從 Sun 的 Java 網站 (http://java.sun.com/) 輕松地找到並下載。在您擴充並安裝了這個驅動程序後,必須執行下列步驟:

將 \jdbc-odbc\classes; 路徑添加到您的 PATH 環境變數中。

將 \jdbc-odbc\classes; 路徑添加到您的 CLASSPATH 環境變數中。

JDBC 驅動程序的類型

Java 程序連接資料庫的方法實際上有四種:

1. JDBC-ODBC 橋和 ODBC 驅動程序 -- 在這種方式下,這是一個本地解決方案,因為 ODBC 驅動程序和橋代碼必須出現在用戶的每台機器中。從根本上說這是一個臨時解決方案。

2. 本機代碼和 Java 驅動程序 -- 它用另一個本地解決方案(該平台上的 Java 可調用的本機代碼)取代 ODBC 和 JDBC-ODBC 橋。

3. JDBC 網路的純 Java 驅動程序 -- 由 Java 驅動程序翻譯的 JDBC 形成傳送給伺服器的獨立協議。然後,伺服器可連接任何數量的資料庫。這種方法使您可能從客戶機 Applet 中調用伺服器,並將結果返回到您的 Applet。在這種情況下,中間件軟體提供商可提供伺服器。

4. 本機協議 Java 驅動程序 -- Java 驅動程序直接轉換為該資料庫的協議並進行調用。這種方法也可以通過網路使用,而且可以在 Web 瀏覽器的 Applet 中顯示結果。在這種情況下,每個資料庫廠商將提供驅動程序。

如果您希望編寫代碼來處理 PC 客戶機資料庫,如 dBase、Foxbase 或 Access,則您可能會使用第一種方法,並且擁有用戶機器上的所有代碼。更大的客戶機-伺服器資料庫產品(如 IBM 的 DB2)已提供了第 3 級別的驅動程序。

兩層模型和三層模型

當資料庫和查詢它的應用程序在同一台機器上,而且沒有伺服器代碼的干預時,我們將生成的程序稱為兩層模型。一層是應用程序,而另一層是資料庫。在 JDBC-ODBC 橋系統中通常是這種情況。

當一個應用程序或 applet 調用伺服器,伺服器再去調用資料庫時,我們稱其為三層模型。當您調用稱為「伺服器」的程序時通常是這種情況。

編寫 JDBC 代碼訪問資料庫

用 ODBC 注冊您的資料庫
連接資料庫

所有與資料庫有關的對象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必須加入 "import java.sql.* "。 JDBC 要連接 ODBC 資料庫,您必須首先載入 JDBC-ODBC 橋驅動程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

該語句載入驅動程序,並創建該類的一個實例。然後,要連接一個特定的資料庫,您必須創建 Connect 類的一個實例,並使用 URL 語法連接資料庫。

String url = "jdbc:odbc:Northwind";
Connection con = DriverManager.getConnection(url);

請注意,您使用的資料庫名是您在 ODBC 設置面板中輸入的「數據源」名稱。

URL 語法可能因資料庫類型的不同而變化極大。

jdbc:subprotocol:subname

第一組字元代表連接協議,並且始終是 jdbc。還可能有一個子協議,在此處,子協議被指定為 odbc。它規定了一類資料庫的連通性機制。如果您要連接其它機器上的資料庫伺服器,可能也要指定該機器和一個子目錄:

jdbc:bark//doggie/elliott

最後,您可能要指定用戶名和口令,作為連接字元串的一部分:

jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof

訪問MSSQL Server方法:(驅動程序需要:msutil.jar,msbase.jar,mssqlServer.jar)
DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver
URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo
username=sa
password=
maxcon=10
mincon=1
poolName=SkyDev

利用我們開發的資料庫類,使用方法如下:

DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost",
1433, "demo", "sa", ""));
Connection con = DbO.getConnection();
//類代碼(不含連接工廠實現)
package skydev.moles.data;

public final class SqlServerConnectionFactory
extends ConnectionFactory {
private final String dbDriver =
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String host;
private int port;
private String databaseName;

public SqlServerConnectionFactory() {
super.setDriverName(dbDriver);
}

/**
*
* @param host 資料庫所在的主機名:如"localhost"
* @param port SQL伺服器運行的埠號,如果使用預設值 1433,傳入一個負數即可
* @param databaseName 資料庫名稱
* @param userName 用戶名
* @param password 口令
*/
public SqlServerConnectionFactory(String host,
int port,
String databaseName,
String userName,
String password) {
this.setHost(host);
this.setPort(port);
this.setDatabaseName(databaseName);
this.setUserName(userName);
this.setPassword(password);

init();
}

private void init() {
super.setDriverName(dbDriver);
super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" +
new Integer(port).toString() + ";DatabaseName=" +
databaseName.trim());
//super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo");
}
……

//------------------------------------------------------------------------------------

訪問MySQL的方法:

DBDriver=com.mysql.jdbc.Driver
URL=jdbc:mysql://localhost/demo
username=
password=
maxcon=5
mincon=1
poolName=zhengmao
訪問資料庫

一旦連接到資料庫,就可以請求表名以及表列的名稱和內容等信息,而且您可以運行 SQL 語句來查詢資料庫或者添加或修改其內容。可用來從資料庫中獲取信息的對象有:

DatabaseMetaData 有關整個資料庫的信息:表名、表的索引、資料庫產品的名稱和版本、資料庫支持的操作。

ResultSet 關於某個表的信息或一個查詢的結果。您必須逐行訪問數據行,但是您可以任何順序訪問列。

ResultSetMetaData 有關 ResultSet 中列的名稱和類型的信息。

盡管每個對象都有大量的方法讓您獲得資料庫元素的極為詳細的信息,但在每個對象中都有幾種主要的方法使您可獲得數據的最重要信息。然而,如果您希望看到比此處更多的信息,建議您學習文檔以獲得其餘方法的說明。

ResultSet

ResultSet 對象是 JDBC 中最重要的單個對象。從本質上講,它是對一個一般寬度和未知長度的表的一種抽象。幾乎所有的方法和查詢都將數據作為 ResultSet 返回。ResultSet 包含任意數量的命名列,您可以按名稱訪問這些列。它還包含一個或多個行,您可以按順序自上而下逐一訪問。在您使用 ResultSet 之前,必須查詢它包含多少個列。此信息存儲在 ResultSetMetaData 對象中。

//從元數據中獲得列數
ResultSetMetaData rsmd;
rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();

當您獲得一個 ResultSet 時,它正好指向第一行之前的位置。您可以使用 next() 方法得到其他每一行,當沒有更多行時,該方法會返回 false。由於從資料庫中獲取數據可能會導致錯誤,您必須始終將結果集處理語句包括在一個 try 塊中。

您可以多種形式獲取 ResultSet 中的數據,這取決於每個列中存儲的數據類型。另外,您可以按列序號或列名獲取列的內容。請注意,列序號從 1 開始,而不是從 0 開始。ResultSet 對象的一些最常用方法如下所示。

getInt(int); 將序號為 int 的列的內容作為整數返回。

getInt(String); 將名稱為 String 的列的內容作為整數返回。

getFloat(int); 將序號為 int 的列的內容作為一個 float 型數返回。

getFloat(String); 將名稱為 String 的列的內容作為 float 型數返回。

getDate(int); 將序號為 int 的列的內容作為日期返回。

getDate(String); 將名稱為 String 的列的內容作為日期返回。

next(); 將行指針移到下一行。如果沒有剩餘行,則返回 false。

Close(); 關閉結果集。

getMetaData(); 返回 ResultSetMetaData 對象。

ResultSetMetaData

您使用 getMetaData() 方法從 ResultSet 中獲取 ResultSetMetaData 對象。您可以使用此對象獲得列的數目和類型以及每一列的名稱。

getColumnCount(); 返回 ResultSet 中的列數。
getColumnName(int); 返回列序號為 int 的列名。
getColumnLabel(int); 返回此列暗含的標簽。
isCurrency(int); 如果此列包含帶有貨幣單位的一個數字,則返回 true。
isReadOnly(int); 如果此列為只讀,則返回 true。
isAutoIncrement(int); 如果此列自動遞增,則返回 true。這類列通常為鍵,而且始終是只讀的。
getColumnType(int); 返回此列的 SQL 數據類型。這些數據類型包括

BIGINT
BINARY
BIT
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INTEGER
LONGVARBINARY
LONGVARCHAR
NULL
NUMERIC
OTHER
REAL
SMALLINT
TIME
TIMESTAMP
TINYINT
VARBINARY
VARCHAR

DatabaseMetaData

DatabaseMetaData 對象可為您提供整個資料庫的信息。您主要用它獲取資料庫中表的名稱,以及表中列的名稱。由於不同的資料庫支持不同的 SQL 變體,因此,也有多種方法查詢資料庫支持哪些 SQL 方法。

getCatalogs() 返回該資料庫中的信息目錄列表。使用 JDBC-ODBC Bridge 驅動程序,您可以獲得用 ODBC 注冊的資料庫列表。這很少用於 JDBC-ODBC 資料庫。

getTables(catalog, schema,tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表的說明。

getColumns(catalog, schema,tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表列說明。

getURL(); 獲得您所連接的 URL 名稱。

getDriverName(); 獲得您所連接的資料庫驅動程序的名稱。

獲取有關表的信息

您可以使用 DataBaseMetaData 的 getTables() 方法來獲取資料庫中表的信息。這個方法有如下4個 String 參數:

results =dma.getTables(catalog, schema, tablemask, types[]);

其中參數的意義是:

Catalog 要在其中查找表名的目錄名。對於 JDBC-ODBC 資料庫以及許多其他資料庫而言,可將其設置為 null。這些資料庫的目錄項實際上是它在文件系統中的絕對路徑名稱。

Schema 要包括的資料庫「方案」。許多資料庫不支持方案,而對另一些資料庫而言,它代表資料庫所有者的用戶名。一般將它設置為 null。

Tablemask 一個掩碼,用來描述您要檢索的表的名稱。如果您希望檢索所有表名,則將其設為通配符 %。請注意,SQL 中的通配符是 % 符號,而不是一般 PC 用戶的 * 符號。

types[] 這是描述您要檢索的表的類型的 String 數組。資料庫中通常包括許多用於內部處理的表,而對作為用戶的您沒什麼價值。如果它是空值,則您會得到所有這些表。如果您將其設為包含字元串「TABLES」的單元素數組,您將僅獲得對用戶有用的表格。

『叄』 在hibernate對於sqlserver2008的配置文件中方言dialect設置為org.hibernate.dialect.SQLServer2008dialect

可能是通用的方言是org.hibernate.dialect.SQLServerdialect 吧

『肆』 建網站的資料庫不同語音的區別

你可以粗略的認為 主流幾個資料庫 MYSQL SQLSERVER ORACLE分為 小型 中型 大型 一般用mysql作小網站就夠了 又免費 MB級 其他兩個要收費··· SQLSERVER好上手教材多···不過是微軟的···跨平台就不指望了···GB級 ORACLE用於銀行啊 電信啊這些 大型數據處理 而且很貴···TG級 不一定很准確···不過你可以大致這么看 oracle你是用不上了 看看下面的吧 SQL SERVER 關系資料庫簡介: SQL SERVER是由MICROSOFT開發和推廣的關系資料庫管理系統(DBMS),它最初是由MICROSOFT、SYBASE和ASHTON-TATE三家公司共同開發的,並於1988年推出了第一個OS/2版本。 SQL SERVER近年來不斷更新版本,1996年,MICROSOFT 推出了SQL SERVER 6.5版本;1998年,SQL SERVER 7.0版本和用戶見面;SQL SERVER 2000是MICROSOFT公司於2000年推出的最新版本。 SQL SERVER 特點: 1.真正的客戶機/伺服器體系結構。 2.圖形化用戶界面,使系統管理和資料庫管理更加直觀、簡單。 3.豐富的編程介面工具,為用戶進行程序設計提供了更大的選擇餘地。 4.SQL SERVER與WINDOWS NT完全集成,利用了NT的許多功能,如發送和接受消息,管理登錄安全性等。SQL SERVER也可以很好地與MICROSOFT BACKOFFICE產品集成。 5.具有很好的伸縮性,可跨越從運行WINDOWS 95/98的膝上型電腦到運行WINDOWS 2000的大型多處理器等多種平台使用。 6.對WEB技術的支持,使用戶能夠很容易地將資料庫中的數據發布到WEB頁面上。 7.SQL SERVER提供數據倉庫功能,這個功能只在ORACLE和其他更昂貴的DBMS中才有。 SQL SERVER 2000與以前版本相比較,又具有以下新特性 : 1.支持XML(EXTENSIVE MARKUP LANGUAGE,擴展標記語言) 2.強大的基於WEB的分析 3.支持OLE DB和多種查詢 4.支持分布式的分區視圖 MYSQL最初的開發者的意圖是用MSQL和他們自己的快速低級常式(ISAM)去連接表格。不管怎樣,在經過一些測試後,開發者得出結論:MSQL並沒有他們需要的那麼快和靈活。這導致了一個使用幾乎和MSQL一樣的API介面的用於他們的資料庫的新的SQL介面的產生,這樣,這個API被設計成允許為用於MSQL而寫的第三方代碼更容易移植到MYSQL。 MYSQL這個名字是怎麼來的已經不清楚了。基本指南和大量的庫和工具帶有前綴「MY」已經有10年以上,而且不管怎樣,MYSQL AB創始人之一的MONTY WIDENIUS的女兒也叫MY。這兩個到底是哪一個給出了MYSQL這個名字至今依然是個密,包括開發者在內也不知道。 MYSQL的海豚標志的名字叫「SAKILA」,它是由MYSQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者AMBROSE TWEBAZE提供。根據AMBROSE所說,SAKILA來自一種叫SISWATI的史瓦濟蘭方言,也是在AMBROSE的家鄉烏干達附近的坦尚尼亞的ARUSHA的一個小鎮的名字。 與其他的大型資料庫例如ORACLE、DB2、SQL SERVER等相比,MYSQL自有它的不足之處,如規模小、功能有限(MYSQL CLUSTER的功能和效率都相對比較差)等,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MYSQL提供的功能已經綽綽有餘,而且由於MYSQL是開放源碼軟體,因此可以大大降低總體擁有成本。 目前INTERNET上流行的網站構架方式是LAMP(LINUX+APACHE+MYSQL+PHP),即使用LINUX作為操作系統,APACHE作為WEB伺服器,MYSQL作為資料庫,PHP作為伺服器端腳本解釋器。由於這四個軟體都是遵循GPL的開放源碼軟體,因此使用這種方式不用花一分錢就可以建立起一個穩定、免費的網站系統。

『伍』 hibernate 配置MySQL方言,報MySQL 語法錯誤。哪位高手幫忙解決下,謝謝!

下面這個地方錯了:
from shenluyuannet.dbo.admin admin0_

from的語法是:資料庫名.表名,也就是最多隻能有一個點,你檢查一下你究竟需要查哪個資料庫的哪個表,可能你有個.是其它符號。

『陸』 各位大俠,誰知道用eclipse怎麼連接sql資料庫,最好步驟詳細一點,我那個老出錯,謝謝了!O(∩_∩)O~

Java連接Sql主要有兩種方法,JDBC和JDBC-ODBC橋,推薦使用JDBC,之前得准備好與資料庫相對應的JDBC。在Eclipse中先新建或者導入項目,然後選擇導入功能,導入JDBC的Jar包,具體連接代碼與連接字元串跟樓上幾位差不多,你也可以到網上搜索一下,很多的。PS:如果採用的資料庫是Sql Server,採用Windows集成驗證時,還應在項目中導入一個sqljdbc_auth.dll文件才能實現連接

『柒』 mysql的sql語句能用在別的資料庫上嗎

不保證一定能用
因為mysql的
sql語句
除了標準的sql之外還添加了自己的方言,標准sql部分是完全可以在其他資料庫中使用的,方言部分就不保證可以兼容其他資料庫
比如mysql的分頁語法limit,就是mysql的方言,在oracle和
sqlserver
上就不能用
比如你的查詢sql:
select
*
from

where
條件;
這種只包含標准
sql語法
的語句就可以在其他資料庫執行
但是你加了分頁語法
select
*
from

where
條件
limit
0,100
這個語句就不能在其他
資料庫系統
上使用了

『捌』 SQLServer存儲多語言數據的幾種方法

一般的,如果是普通的項目型軟體,就比較簡單了,你只需要設計出固定的 ChineseName和EnglishName欄位就可以了。本文並不討論這種形式,而是討論在大型平台化的ERP軟體中如何實現通用化的多語言存儲和讀取。 子表方式第一種方式是建立一張子表,U9大概就是這個樣子,你需要注意的是,每一個實體如果包含多語言欄位,都會出現以_Trl為後綴的表。也許你會覺得麻煩,其實不然,這些都是平台在後台自動處理了,你僅僅需要標記這個欄位是多語言欄位就可以了。 從理論上來說,他的存儲是最符合資料庫設計原則的,不管你的系統使用多少語言,資料庫結構是不變的。但是我總覺得查詢起來SQL會比較復雜,雖然這事平台也會幫助你完成。我在想,如果我要一個多語言策略如何實現呢?多語言策略的例子:如果此欄位沒有對應的繁體中文,取簡體中文,如果還沒有,取默認的語言內容。那麼在一個SQL中如何實現呢? 數據結構是一樣的,唯一的區別是通過ORM屏蔽了資料庫的結構,在設計實體時,你僅僅設計了Name欄位,其類型是「多語言類型」,然後在客戶那裡初始化時,客戶可以決定採用多少種語言,然後ORM在後台自動添加這些列。 這是我希望的設計,因為他足夠的簡潔,任何人都可以非常方便的寫出SQL語言。而且執行起來一定是最高效的。而且實現上面說的取值策略也很容易,只需要實現編排好多個嵌套的IIF函數就是了。 缺點呢?當然有,首先冗餘很大,即使沒有填寫對應的英文,一樣要佔用一個空間。其次,如果客戶發神經,一下子選擇了十幾個語言,然後發現他並不需要,又想刪除掉?那麼我需要檢查資料庫的所有相關欄位是否全部沒有數據,才能決定可以刪除這個語言並刪除所有相關的欄位。這是個問題。 XML欄位這種方式我就不畫圖了,很簡單,還是只有一個欄位Name,不過數據類型不是nvarchar,而是把定義成XML類型,這是SQLServer2005新增的類型,我們可以在此欄位存儲諸如下面這樣的數據:12345<items<itemlng=VALUE=默認/<itemlng=CHSVALUE=中文/<itemlng=ENVALUE=English/</items SelectEmployeeId,Name.value(』(/items/item[@lng="CHS"]/@value)[1]』,』nvarchar(max)』)FROMEmployees 很簡單,我喜歡。 不過有人可能會說,其實沒有xml類型前,我就已經使用nvarchar來實現了,使用一個自定義函數一樣可以解決(使用諸如:/en/english /chs/中文的方式存儲)。但是我認為字元串方式處理並不完美,主要表現在你必須自己小心處理特殊字元,否則很容易亂套。使用XML類型的話資料庫會處理這些。另外,SQL Server對XML類型的查詢有優化處理,比起SQL自定義函數運行的速度要快的多。

『玖』 sqlserver 怎麼配置方言

Microsoft SQL Server 2000 方言:org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2005 方言:org.hibernate.dialect.SQLServer2005Dialect
Microsoft SQL Server 2008 方言:org.hibernate.dialect.SQLServer2008Dialect

在hibernate 中應該是這樣的,例如
hibernate.dialect=org.hibernate.dialect.SQLServerDialect