|
導讀數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應... 數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。 微軟的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> 全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!