前一章我们已经掌握了如何用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)