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 Server映象自動生成指令碼方法SQLServer指令碼
- PowerDesigner: 利用sql指令碼檔案逆生成模型SQL指令碼模型
- [20211129]更新dpcawr1.sql指令碼.txtPCASQL指令碼
- redolog生成指令碼指令碼
- [20211011]計算sql_id.sh指令碼的一些補充.txtSQL指令碼
- [20230203]建立完善sp1x.sql指令碼.txtSQL指令碼
- 一些有趣的VBS指令碼指令碼
- SQL 的後計算指令碼SQL指令碼
- sqoop指令碼批量生成OOP指令碼
- mybatis執行sql指令碼MyBatisSQL指令碼
- SQL SERVER巡檢指令碼SQLServer指令碼
- [SQL Server玩轉Python] 一.安裝環境及T-SQL呼叫python指令碼SQLServerPython指令碼
- [20231021]生成bbed的執行指令碼.txt指令碼
- [20190107]生成bbed執行指令碼:指令碼
- catalog.sql指令碼介紹SQL指令碼
- sql_trace相關指令碼SQL指令碼
- DB2的一些管理用指令碼DB2指令碼
- [20231025]完善tpt的trans.sql指令碼.txtSQL指令碼
- [20220823]完善tpt的ashtop.sql指令碼.txtSQL指令碼
- JMeter做效能測試(1)-效能壓測指令碼的生成以及完善和增強JMeter指令碼
- 案例四:Shell指令碼生成隨機密碼指令碼隨機密碼
- IDEA 利用groovy指令碼生成註釋Idea指令碼
- Oracle批次生成Merge指令碼程式Oracle指令碼
- [20231117]完善ashtt.sql指令碼.txtSQL指令碼
- django指令碼orm中使用原生sqlDjango指令碼ORMSQL
- [20211230]完善sql_id指令碼.txtSQL指令碼
- [20211122]完善descx.sql指令碼.txtSQL指令碼
- [20221012]完善spsw.sql指令碼.txtSQL指令碼
- [20221010]完善descz.sql指令碼.txtSQL指令碼
- [20221101]完善descz.sql指令碼.txtSQL指令碼
- [20221101]完善gts.sql指令碼.txtSQL指令碼
- [20230203]完善awr.sql指令碼.txtSQL指令碼
- [20230123]完善curheapz.sql指令碼.txtSQL指令碼
- [20210407]完善ti.sql指令碼.txtSQL指令碼
- [20210125]完善hide.sql指令碼.txtIDESQL指令碼
- [20231023]生成bbed的執行指令碼(bash shell).txt指令碼
- 一個能夠生成 Markdown 表格的 Bash 指令碼指令碼
- LightDB/PostgreSQL 生成可重複執行的指令碼SQL指令碼
- DBA日常維護SQL指令碼_自己編寫的SQL指令碼