在SQL Server数据库中,当你想使用一个数据,而这个数据不保存在表中,计算列很有用。例如,你有一张表,它包括列dollar amounts, wholesale prices和retail prices。你肯定不想在每次查询表时来计算那两列之间的差值,你希望将其值保存在第三列中,让其自动计算前两列之间的差值。而此列就是计算列。
在SQL Server中使用XML数据来创建计算列,你的列定义必须包含必要的用来检测向列中插入的是什么数据的表达式。例如,在上面的例子中,你的表达式应该从retail列中的值减去wholesale列中的值。当你添加或更新表中的数据行时,差值将自动插入至计算列中……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
在SQL Server数据库中,当你想使用一个数据,而这个数据不保存在表中,计算列很有用。例如,你有一张表,它包括列dollar amounts, wholesale prices和retail prices。你肯定不想在每次查询表时来计算那两列之间的差值,你希望将其值保存在第三列中,让其自动计算前两列之间的差值。而此列就是计算列。
在SQL Server中使用XML数据来创建计算列,你的列定义必须包含必要的用来检测向列中插入的是什么数据的表达式。例如,在上面的例子中,你的表达式应该从retail列中的值减去wholesale列中的值。当你添加或更新表中的数据行时,差值将自动插入至计算列中。
你可以很容易地在两个或更多的包含字符串或数字类型值的列的基础上创建计算列。(更多关于如何创建此类型的计算列的详细信息,请参考Microsoft SQL Server Books Online)。然而,如果你想要基于指定的XML列中元素值创建一个计算列,该过程相对更加复杂一些。因为你必须使用Xquery表达式来从XML列中获取指定元素数据,且SQL Server不支持在计算列的定义中使用Xquery表达式。
要解决此问题,可以创建一个函数来接收你想包含在计算列中的XML数据,并在计算列定义中调用此函数。更好的示范这是如何工作的,我们在这给出一个例子。我在SQL Server 2005的示例数据库AdventureWorks中创建以下的架构和表:
USE AdventureWorks; GO CREATE SCHEMA hr GO SELECT TOP 10 JobCandidateID AS CandidateID, [Resume] AS JobResume INTO hr.CandidateNames FROM HumanResources.JobCandidate GO |
正如名称所示,HumanResources.JobCandidate表中的Resume列是一个XML列,它包含侯选人的履历信息。我从这张表中提取数据来创建hr架构中的CandidateNames表。(我创建了一个单独的表,因为我希望可以修改表定义,从而可以增加计算列)
在建立好测试环境后,你可以创建函数。函数应该包括在从指定的XML列中获取数据时所需的XQuery表达式。例如,以下函数接收工作候选人的姓名,并保存在JobResume列中:
CREATE FUNCTION hr.FullName (@name XML) RETURNS NVARCHAR(60) AS BEGIN RETURN @name.value('declare namespace ns= "http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume"; concat((/ns:Resume/ns:Name/ns:Name.First)[1], " ", (/ns:Resume/ns:Name/ns:Name.Last)[1])','nvarchar(60)') END |
正如你所看到的,函数FullName带一个输入参数,该参数被定义成XML类型。这个做法是当调用此函数时,可以把包含所需提取的数据的XML列名称作为输入值来使用。
翻译
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。