我们回顾一下上一节的内容:我们已经能够创建一些简单的静态或者动态模板了,下面我们就来学习建立一个数据模板
1.编写一个数据模板
使用模板生成代码的一个很重要的用途就是数据库模板。通过使用CodeSmith 的SchemaExplorer 组件就能达到这个目的,该数据组件支持SQL以及ADO数据服务。这一节,你将了解到怎么利用SchemaExplorer所提供的信息来生成复杂的T-SQL代码。
2.SQL Server 2005中的HTTP Endpoints
SQL Server 2005众多新特性中很引人注目的一个就是能通过执行T-SQL代码生成HTTP endpoints。HTTP endpoints有很多用途,但我们最关心的是HTTP endpoints让返回SQL数据到WEB服务更容易了。实际上,如果你在Windows Server 2003上运行SQL Server 2005,你甚至不需要IIS为返回SQL 数据而创建一个web服务。只需要在现有的存储过程上加上CREATE ENDPOINT 就能实现以上目的了。
虽然包含CREATE ENDPOINT的存储过程可以写得很复杂,但是如果你觉得这个存储过程要多次使用的话,那么完全可以使用代码模板。那么还是用我们之前用过的方法,先来看看你要生成的SQL语句是个什么样子。
3.我们的目标SQL代码
我们将根据一张实际的表创建一个HTTP endpoint ,因为HTTP endpoint 只能从存储过程或者函数返回信息,这就意味着我们必须建立两个SQL语句:一个创建一个存储过程,一个创建endpoint本身;在下面的例子中,我们使用示例数据库:AdventureWorks中的Person.AddressType 表:
CREATE PROC dbo.PersonAddressTypeProc
AS
SELECT
AddressTypeID,
Name,
rowguid,
ModifiedDate
FROM
Person.AddressType
GO
>CREATE ENDPOINT GetAddressType
STATE = STARTED
AS HTTP
(
PATH = '/AddressType',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR),
SITE = 'localhost'
)
FOR SOAP
(
WEBMETHOD 'AddressTypeList'
(NAME='AdventureWorks.dbo.PersonAddressTypeProc'),
BATCHES = DISABLED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
NAMESPACE = 'http://AdventureWorks/AddressType'
)
GO
我们已经高亮标注了两种不同的信息,红色部分的SQL代码表示用户可以从列表中选择的内容。绿色的部分代表CodeSmith 可以根据用户指定的SQL数据库中的表中获取的内容。剩下的就是静态不变的内容。
接下来我们就利用CodeSmith Studio快速生成一个数据模板。
4.利用CodeSmith Studio创建一个模板
首先启动CodeSmith Studio,然后选择File > New > VB模板,这样将会生成一些样板代码,我们直接修改这些代码如下:
<%
@ CodeTemplate Language
=
"VB" TargetLanguage
=
"T
-
SQL" Description
=
"
Create
an HTTP Endpoint."
%>
TargetLanguage 属性表示你将要生成的代码是 T-SQL语言,这个属性和代码中的静态内容是息息相关的。接下来用我们将要生成的SQL代码替代模板中剩下的样板代码。
<%
@ CodeTemplate Language
=
"VB" TargetLanguage
=
"T
-
SQL" Description
=
"
Create
an HTTP Endpoint."
%>
CREATE
PROC
dbo.PersonAddressTypeProc
AS
SELECT
AddressTypeID,
Name,
rowguid,
ModifiedDate
FROM
Person.AddressType
GO
CREATE
ENDPOINT GetAddressType
STATE
=
STARTED
AS
HTTP
(
PATH
=
'
/AddressType
'
,
AUTHENTICATION
=
(INTEGRATED),
PORTS
=
(CLEAR),
SITE
=
'
localhost
'
)
FOR
SOAP
(
WEBMETHOD
'
AddressTypeList
'
(NAME
=
'
AdventureWorks.dbo.PersonAddressTypeProc
'
),
BATCHES
=
DISABLED,
WSDL
=
DEFAULT
,
DATABASE
=
'
AdventureWorks
'
,
NAMESPACE
=
'
http://AdventureWorks/AddressType
'
)
GO
当然,你需要的不是这样一个静态模板,在下一节我们将加入动态内容
1.编写一个数据模板
使用模板生成代码的一个很重要的用途就是数据库模板。通过使用CodeSmith 的SchemaExplorer 组件就能达到这个目的,该数据组件支持SQL以及ADO数据服务。这一节,你将了解到怎么利用SchemaExplorer所提供的信息来生成复杂的T-SQL代码。
2.SQL Server 2005中的HTTP Endpoints
SQL Server 2005众多新特性中很引人注目的一个就是能通过执行T-SQL代码生成HTTP endpoints。HTTP endpoints有很多用途,但我们最关心的是HTTP endpoints让返回SQL数据到WEB服务更容易了。实际上,如果你在Windows Server 2003上运行SQL Server 2005,你甚至不需要IIS为返回SQL 数据而创建一个web服务。只需要在现有的存储过程上加上CREATE ENDPOINT 就能实现以上目的了。
虽然包含CREATE ENDPOINT的存储过程可以写得很复杂,但是如果你觉得这个存储过程要多次使用的话,那么完全可以使用代码模板。那么还是用我们之前用过的方法,先来看看你要生成的SQL语句是个什么样子。
3.我们的目标SQL代码
我们将根据一张实际的表创建一个HTTP endpoint ,因为HTTP endpoint 只能从存储过程或者函数返回信息,这就意味着我们必须建立两个SQL语句:一个创建一个存储过程,一个创建endpoint本身;在下面的例子中,我们使用示例数据库:AdventureWorks中的Person.AddressType 表:
AS
SELECT
AddressTypeID,
Name,
rowguid,
ModifiedDate
FROM
Person.AddressType
GO
>CREATE ENDPOINT GetAddressType
STATE = STARTED
AS HTTP
(
PATH = '/AddressType',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR),
SITE = 'localhost'
)
FOR SOAP
(
WEBMETHOD 'AddressTypeList'
(NAME='AdventureWorks.dbo.PersonAddressTypeProc'),
BATCHES = DISABLED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
NAMESPACE = 'http://AdventureWorks/AddressType'
)
GO
我们已经高亮标注了两种不同的信息,红色部分的SQL代码表示用户可以从列表中选择的内容。绿色的部分代表CodeSmith 可以根据用户指定的SQL数据库中的表中获取的内容。剩下的就是静态不变的内容。
接下来我们就利用CodeSmith Studio快速生成一个数据模板。
4.利用CodeSmith Studio创建一个模板
首先启动CodeSmith Studio,然后选择File > New > VB模板,这样将会生成一些样板代码,我们直接修改这些代码如下:
TargetLanguage 属性表示你将要生成的代码是 T-SQL语言,这个属性和代码中的静态内容是息息相关的。接下来用我们将要生成的SQL代码替代模板中剩下的样板代码。