|
| |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
微软的SQL脚本生成令我伤透了心――我一直以为是我的程序上的问题,或者我操作上的失误,并且,客服人员屡屡埋怨我的程序bug,多次测试之后,才发现,原来都是微软惹的祸…… Sql Server的脚本生成有不少漏洞,常常由_art_center>它生成的脚本运行起来会有错误。下面举例说明: 1. 并没有根据sysdenpends的依靠关系生成SQL代码,而是根据所谓的“优先级”来生成。 比如:他认为view的优先级就要比function高。 那么,我写了下面的测试程序,形成如下的依靠关系:fnT1 <-- vwT1 <-- fnT2 就是,view vwT1处于依靠的中间。 _NOBR> _CODE>create function fnT1() returns Integer as begin return 123 end go create view vwT1 as select aa=dbo.fnT1() go create function fnT2() returns table as return (select * from vwT1) go_CODE> _NOBR> 运行到数据库之后,用Enterprise生成SQL代码。要注重选项不相同,生成的代码会有所不同,在这里我没有选数据库和用户。 _NOBR> _CODE>if exists (select * from dbo.sysobjects where id = object_id(N\\\'[dbo].[fnT1]\\\') and xtype in (N\\\'FN\\\', N\\\'IF\\\', N\\\'TF\\\')) drop function [dbo].[fnT1] GO if exists (select * from dbo.sysobjects where id = object_id(N\\\'[dbo].[fnT2]\\\') and xtype in (N\\\'FN\\\', N\\\'IF\\\', N\\\'TF\\\')) drop function [dbo].[fnT2] GO if exists (select * from dbo.sysobjects where id = object_id(N\\\'[dbo].[vwT1]\\\') and OBJECTPROPERTY(id, N\\\'IsView\\\') = 1) drop view [dbo].[vwT1] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO Create view vwT1 As Select aa=dbo.fnT1() GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO Create function fnT1() Returns Integer As begin Return 123 end GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO Create function fnT2() Returns Table As Return (Select * From vwT1) GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO_CODE> _NOBR> 返回类别: 教程 上一教程: 数据库人员手边系列:SQL Server数据表的信息 下一教程: 修改用户定义的数据类型 您可以阅读与"SQL脚本生成的一些BUG(1)"相关的教程: · SQL脚本生成的一些BUG(2) · SQL脚本生成的一些BUG · SQL SERVER中的一些技巧 · SQL语句的一些集合 · Sqlserver中的一些技巧 |
| 快精灵印艺坊 版权所有 |
首页 |
||