SQL指令碼生成的一些BUG(1)(轉)
SQL指令碼生成的一些BUG(1)(轉)[@more@]微軟的SQL指令碼生成令我傷透了心——我一直以為是我的程式上的問題,或者我操作上的失誤,並且,客服人員屢屢埋怨我的程式bug,多次測試之後,才發現,原來都是微軟惹的禍……
Sql Server的指令碼生成有不少漏洞,經常由_art_center>它生成的指令碼執行起來會有錯誤。下面舉例說明:
1. 並沒有根據sysdenpends的依賴關係生成SQL程式碼,而是根據所謂的“優先順序”來生成。
比如:他認為view的優先順序就要比function高。
那麼,我寫了下面的測試程式,形成如下的依賴關係:fnT1
就是,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的指令碼生成有不少漏洞,經常由_art_center>它生成的指令碼執行起來會有錯誤。下面舉例說明:
1. 並沒有根據sysdenpends的依賴關係生成SQL程式碼,而是根據所謂的“優先順序”來生成。
比如:他認為view的優先順序就要比function高。
那麼,我寫了下面的測試程式,形成如下的依賴關係:fnT1
就是,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>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-960729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL指令碼生成的一些BUG(2)(轉)SQL指令碼
- 使用sql生成sql指令碼SQL指令碼
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- [筆記]一些SQL指令碼筆記SQL指令碼
- 利用shell指令碼生成動態sql指令碼SQL
- 生成sql monitor active report指令碼SQL指令碼
- sql server 資料指令碼生成工具SQLServer指令碼
- ORACLE DBA常用SQL指令碼工具->管理篇(1) (轉)OracleSQL指令碼
- SQL Server中快速生成大量記錄的SQL指令碼SQLServer指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- 生成insert指令碼的指令碼指令碼
- 生成sql server2000物件建立指令碼的儲存過程(轉)SQLServer物件指令碼儲存過程
- 轉貼:批量生成awr報告指令碼指令碼
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 巧用shell指令碼生成快捷指令碼指令碼
- powerdesigner生成的sql建表指令碼如何去除雙引號"SQL指令碼
- 程式碼生成器Sql Server 和 Mysql 資料庫指令碼ServerMySql資料庫指令碼
- 透過shell指令碼定位效能sql和生成報告指令碼SQL
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- 生成awr報告的指令碼指令碼
- 自動生成Statspack的指令碼指令碼
- Bash指令碼debug攻略指令碼
- 將表資料生成SQL指令碼的儲存過程和工具SQL指令碼儲存過程
- 自動ftp,生成control file,sql*load的shell指令碼FTPSQL指令碼
- redolog生成指令碼指令碼
- 批量生成DDL指令碼指令碼
- Python 轉義符以及指令碼自動生成Python指令碼
- 一些有趣的VBS指令碼指令碼
- oracle dba 的一些指令碼Oracle指令碼
- 一些常用的SQL(05版以上)資料庫維護指令碼SQL資料庫指令碼
- oracle DBA 常用監控指令碼1(轉)Oracle指令碼
- 指令碼1指令碼
- 彙編debug程式跳轉指令的方法
- 用powerdesigner15(pdm)pd生成資料庫sql指令碼資料庫SQL指令碼
- Perl連線Oracle資料庫的一些操作指令碼【轉】Oracle資料庫指令碼
- sqoop指令碼批量生成OOP指令碼
- 生成熱備份指令碼指令碼