SQL指令碼生成的一些BUG(2)(轉)
SQL指令碼生成的一些BUG(2)(轉)[@more@]從上面你一眼就可以看出來了,建立view要比建立function先,而不是根據依賴關係建立。毫無疑問,將會得到如下的嚴重的錯誤:
伺服器: 訊息 208,級別 16,狀態 1,過程 vwT1,行 4
物件名 'dbo.fnT1' 無效。
伺服器: 訊息 208,級別 16,狀態 1,過程 fnT2,行 5
物件名 'vwT1' 無效。
2. 作業指令碼
這個我就不說了,bug還不是很嚴重,主要是中文“——”註釋符的問題。英文版我沒有測試過,不過猜想應當沒有這個bug,大家可以試試看。
3. 還有一個SP的問題
spGetIDStr和spAnalyseStrList的關係,是後者依賴於前者。可是spGetIDStr我並沒有呼叫任何的表,因此,每當執行SQL Server生成的指令碼的時候,總是報告類似這樣的資訊:
spGetIDStr並不存在,無法在sysdepends裡建立依賴關係,儲存過程spAnalyseStrList仍然建立。無論我手工修改其建立順序或是別的方面,用它生成的指令碼就是有錯。這裡,再看看第三個bug,看我下面的測試程式:
(原理:當sp沒有對錶或檢視等資料庫物件有依賴關係時,sp被別的sp引用時也將無法建立依賴關係)
形成依賴關係:spB1
_NOBR> _CODE>create proc spB1
as
return 11
go
create proc spA1
as
begin
declare @i int
exec @i=spB1
return @i*2
end
go_CODE>
_NOBR>
生成的指令碼就為:
_NOBR> _CODE>if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spA1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spA1]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spB1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spB1]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
Create proc spA1
As
Begin
Declare @i int
Exec @i=spB1
Return @i*2
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
Create Proc spB1
As
Return 11
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO_CODE>
_NOBR>
現在,大家應當明白我故意命名為spA1,spB1緣故了。因為如果沒有依賴關係的話,A自然排在B前面,你看微軟可不就是這麼做的麼?幸好這個bug還不是很大,怎麼說SP還是建立了起來。
各位有興趣的可以試試別的,比如sp與fn,sp Group等等。
伺服器: 訊息 208,級別 16,狀態 1,過程 vwT1,行 4
物件名 'dbo.fnT1' 無效。
伺服器: 訊息 208,級別 16,狀態 1,過程 fnT2,行 5
物件名 'vwT1' 無效。
2. 作業指令碼
這個我就不說了,bug還不是很嚴重,主要是中文“——”註釋符的問題。英文版我沒有測試過,不過猜想應當沒有這個bug,大家可以試試看。
3. 還有一個SP的問題
spGetIDStr和spAnalyseStrList的關係,是後者依賴於前者。可是spGetIDStr我並沒有呼叫任何的表,因此,每當執行SQL Server生成的指令碼的時候,總是報告類似這樣的資訊:
spGetIDStr並不存在,無法在sysdepends裡建立依賴關係,儲存過程spAnalyseStrList仍然建立。無論我手工修改其建立順序或是別的方面,用它生成的指令碼就是有錯。這裡,再看看第三個bug,看我下面的測試程式:
(原理:當sp沒有對錶或檢視等資料庫物件有依賴關係時,sp被別的sp引用時也將無法建立依賴關係)
形成依賴關係:spB1
_NOBR> _CODE>create proc spB1
as
return 11
go
create proc spA1
as
begin
declare @i int
exec @i=spB1
return @i*2
end
go_CODE>
_NOBR>
生成的指令碼就為:
_NOBR> _CODE>if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spA1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spA1]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spB1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spB1]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
Create proc spA1
As
Begin
Declare @i int
Exec @i=spB1
Return @i*2
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
Create Proc spB1
As
Return 11
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO_CODE>
_NOBR>
現在,大家應當明白我故意命名為spA1,spB1緣故了。因為如果沒有依賴關係的話,A自然排在B前面,你看微軟可不就是這麼做的麼?幸好這個bug還不是很大,怎麼說SP還是建立了起來。
各位有興趣的可以試試別的,比如sp與fn,sp Group等等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-960732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- PowerDesigner: 利用sql指令碼檔案逆生成模型SQL指令碼模型
- DB2的一些管理用指令碼DB2指令碼
- [20230414]完善seg2.sql指令碼.txtSQL指令碼
- redolog生成指令碼指令碼
- [20211011]計算sql_id.sh指令碼的一些補充.txtSQL指令碼
- [20230302]建立完善tpt o2.sql指令碼.txtSQL指令碼
- 一些有趣的VBS指令碼指令碼
- SQL 的後計算指令碼SQL指令碼
- sqoop指令碼批量生成OOP指令碼
- [20231101]使用tpt seg2.sql指令碼問題.txtSQL指令碼
- [20220519]完善tpt dash_wait_chains2.sql指令碼.txtAISQL指令碼
- mybatis執行sql指令碼MyBatisSQL指令碼
- SQL SERVER巡檢指令碼SQLServer指令碼
- [SQL Server玩轉Python] 一.安裝環境及T-SQL呼叫python指令碼SQLServerPython指令碼
- DB2資料提取轉化的一個指令碼KCDB2指令碼
- [20231021]生成bbed的執行指令碼.txt指令碼
- [20190107]生成bbed執行指令碼:指令碼
- catalog.sql指令碼介紹SQL指令碼
- sql_trace相關指令碼SQL指令碼
- wrk(2)- Lua 指令碼的使用指令碼
- [20231025]完善tpt的trans.sql指令碼.txtSQL指令碼
- [20220823]完善tpt的ashtop.sql指令碼.txtSQL指令碼
- 案例四: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指令碼