前一章我們已經掌握了如何用SQL Server Management Studio(SSMS)連接SQL Azure 雲端數據庫。
這章我們將介紹如何使用SSMS在SQL Azure里執行T-SQL語句。
我們知道SQL Azure雲端數據庫是基於SQL Server 2012(Denali)的,也就是說SQL Azure支持大部分SQL Server的T-SQL語句。這里我們注意到,是大部分而不是全部的T-SQL語句。
1.首先我們用SSMS連接SQL Azure數據庫(過程略,具體步驟請參考前一章的內容),我們還是使用newDB這個數據庫
2.Create Table
假設我要創建一張學生信息表(student),這張表包含3個字段:
- 主鍵(unikey)
- 學號(studentnumber)
- 姓名(name)
創建的T-SQL語句如下:
create table dbo.student
(
unikey nvarchar(100) not null ,
studentnumber nvarchar(100) not null ,
name nvarchar(100) not null
)
Go
執行create table后顯示執行成功:
於是這張student表就在微軟East Asia(香港)的SQL Azure服務器上創建成功了。但是這張表不包含任何數據,我們需要給它添加一些內容,這就需要insert into語句,具體如下:
隨后我們繼續執行這行語句,但是SSMS顯示執行不成功
報錯信息為:這個版本的SQL Server不支持沒有聚集索引的表。也就是說SQL Azure 數據庫不支持沒有聚集索引的表。
好了,看到這里有些讀者會問:什么是聚集索引? 關於聚集索引的詳細解答可以瀏覽百度百科。簡單的說:聚集索引保證了確定表中數據的物理順序。保證了這張表的數據在物理存儲上在同一位置的。
那為什么SQL Azure上需要聚集索引呢?原因也非常簡單:如果沒有聚集索引的話,我們在student表中存儲的數據可能存儲在香港數據中心的若干台不同的物理磁盤里。而我們又知道,SQL Azure會自動做三重備份,存儲在不同的物理磁盤的數據必然會降低備份的效率。讀者如果有興趣的話可以參考SQL Azure Team Blog: Why Do I Need a Clustered Index?
好了,我們必須要在student表中添加聚集索引,執行這句T-SQL
alter table dbo.student add constraint pk_whatever primary key clustered(unikey)
這樣就在主鍵unikey上添加了聚集索引。我們繼續執行insert語句:
顯示執行成功!我們使用select語句來驗證插入的數據:
2.中文顯示
我們還是使用student表,先刪除之前插入的2行數據:
delete from student;
然后插入4行新的數據:
最后查詢我們插入的這4行數據:
仔細的讀者會發現我們插入4行數據有2行無法正常顯示學生的姓名,為什么呢?
我們可以執行這樣一句T-SQL語句
select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='student'
會顯示如下信息:
SQL Azure 數據庫使用的默認數據庫排序規則是:SQL_LATIN1_GENERAL_CP1_CI_AS,LATIN1_GENERAL 是英語,所以在進行中文字符插入時在字符串前面加上一個大寫字母N。
注:關於對SQL_LATIN1_GENERAL_CP1_CI_AS的修改
alter table [TABLENAME]
alter column [COLUMNNAME] varchar(255) COLLATE Chinese_PRC_CS_AS_WS NULL
修改后的結果如下:
3.SELECT INTO
我們想創建一張新表叫mystudent,這張表的內容是完全復制student表。
執行以下語句
SELECT * INTO mystudent FROM student
執行結果如下:
報錯內容:SELECT INTO在Windows Azure里不被支持。
所以如果我們要復制一張表的所有內容,不能使用SELECT INTO語句,只能
- 先創建新表:CREATE TABLE mystudent
- 使用INSERT INTO mystudent SELECT FROM
以上我介紹了在SQL Azure里執行三個不同的T-SQL語句與我們在傳統SQL Server中的不同,更多內容請讀者參考:
- MSDN:一般性的知道原則和限制 (SQL Azure數據庫)
- MSDN: Supported Transact-SQL Statements (SQL Azure Database)
- MSDN: Unsupported Transact-SQL Statements (SQL Azure Database)