從底層簡析Python法式的履行進程。本站提示廣大學習愛好者:(從底層簡析Python法式的履行進程)文章只能為提供參考,不一定能成為您想要的結果。以下是從底層簡析Python法式的履行進程正文
1、斷定數據表能否存在
辦法一:
use yourdb;
go
if object_id(N'tablename',N'U') is not null
print '存在'
else
print '不存在'
例如:
use fireweb;
go
if object_id(N'TEMP_TBL',N'U') is not null
print '存在'
else
print '不存在'
辦法二:
USE [實例名]
GO
IF EXISTS (SELECT * FROM dbo.SysObjects WHERE ID = object_id(N'[表名]') AND OBJECTPROPERTY(ID, 'IsTable') = 1)
PRINT '存在'
ELSE
PRINT'不存在'
例如:
use fireweb;
go
IF EXISTS (SELECT * FROM dbo.SysObjects WHERE ID = object_id(N'TEMP_TBL') AND OBJECTPROPERTY(ID, 'IsTable') = 1)
PRINT '存在'
ELSE
PRINT'不存在'
2、暫時表能否存在:
辦法一:
use fireweb;
go
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##TEMP_TBL'))
PRINT '存在'
ELSE
PRINT'不存在'
辦法二:
use fireweb;
go
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#TEMP_TBL') and type='U')
PRINT '存在'
ELSE
PRINT'不存在'
上面是彌補引見:
在sqlserver(應當說在今朝一切數據庫產物)中創立一個資本如表,視圖,存儲進程中都要斷定與創立的資本能否曾經存在
在sqlserver中普通可經由過程查詢sys.objects體系表來得知成果,不外可以有更便利的辦法
以下:
if object_id('tb_table') is not null
print 'exist'
else
print'not exist'
如上,可用object_id()來疾速到達雷同的目標,tb_table就是我將要創立的資本的稱號,所以要先斷定以後數據庫中不存在雷同的資本
object_id()可接收兩個參數,第一個如上所示,代表資本的稱號,下面的就是表的名字,但常常我們要解釋我們所要創立的是甚麼類型的資本,
如許sql可以明白地在一品種型的資本中查找能否有反復的名字,以下:
if object_id('tb_table','u') is not null
print 'exist'
else
print'not exist'
第二個參數 "u" 就表現tb_table是用戶創立的表,即:USER_TABLE地首字母簡寫
查詢sys.objects中可獲得各類資本的類型稱號(TYPE列),這裡之舉幾個重要的例子
u ----------- 用戶創立的表,差別於體系表(USER_TABLE)
s ----------- 體系表(SYSTEM_TABLE)
v ----------- 視圖(VIEW)
p ----------- 存儲進程(SQL_STORED_PROCEDURE)
可以使用select distinct type ,type_desc from sys.objects 取得全體信息
庫能否存在
if exists(select * from master..sysdatabases where name=N'庫名')
print 'exists'
else
print 'not exists'
---------------
-- 斷定要創立的表名能否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-- 刪除表
drop table [dbo].[表名]
GO
---------------
-----列能否存在
IF COL_LENGTH( '表名','列名') IS NULL
PRINT 'not exists'
ELSE
PRINT 'exists'
alter table 表名 drop constraint 默許值稱號
go
alter table 表名 drop column 列名
go
-----
--斷定要創立暫時表能否存在
If Object_Id('Tempdb.dbo.#Test') Is Not Null
Begin
print '存在'
End
Else
Begin
print '不存在'
End
---------------
-- 斷定要創立的存儲進程名能否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[存儲進程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 刪除存儲進程
drop procedure [dbo].[存儲進程名]
GO
---------------
-- 斷定要創立的視圖名能否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[視圖名]') and OBJECTPROPERTY(id, N'IsView') = 1)
-- 刪除視圖
drop view [dbo].[視圖名]
GO
---------------
-- 斷定要創立的函數名能否存在
if exists (select * from sysobjects where xtype='fn' and name='函數名')
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函數名]') and xtype in (N'FN', N'IF', N'TF'))
-- 刪除函數
drop function [dbo].[函數名]
GO
if col_length('表名', '列名') is null
print '不存在'
select 1 from sysobjects where id in (select id from syscolumns where name='列名') and name='表名'
�歸並的文章後,就很輕易評論辯論這個成績了。這個成績產生的緣由是依據標准,一個盒子假如沒有上補白(padding-top)和上邊框(border-top),那末這個盒子的上邊距會和其外部文檔流中的第一個子元素的上邊距堆疊。
再說了白點就是:父元素的第一個子元素的上邊距margin-top假如碰不到有用的border或許padding.就會赓續一層一層的找本身“引導”(父元素,先人元素)的費事。只需給引導設置個有用的 border或許padding便可以有用的管束這個目無引導的margin避免它越級,假傳诏書,把本身的margin當引導的margin履行。
關於垂直外邊距歸並的處理計劃下面曾經說明了,為父元素例子中的middle元素增長一個border-top或許padding-top便可處理這個成績。
普通說來這個成績說明到這裡,年夜多半文章就不會再深刻下去了,但作為一位實戰開辟者,最求的是知其然知其所以然,本來應用margin-top就是為了與父元素離隔間隔,而依照你這麼一個解法,實際上是一種“修復”,為了“填補修復”這個父子垂直外邊距歸並這個CSS標准“Bug”,而強迫在父元素上應用border-top和padding-top,不舒暢,也不輕易記住,下次再產生如許的情形照樣會忘卻這條原則���並且在頁面設計稿裡假如不須要border-top加個上邊框,這麼一加反而弄巧成拙,為今後修正留下隱患。
用Margin照樣用Padding
什麼時候應該應用margin:須要在border外側添加空白時。空白處不須要配景(色)時。高低相連的兩個盒子之間的空白,須要互相抵消時。如15px + 20px的margin,將獲得20px的空白。
什麼時候應該時用padding:須要在border內測添加空白時。空白處須要配景(色)時。高低相連的兩個盒子之間的空白,願望等於二者之和時。如15px + 20px的padding,將獲得35px的空白。
小我以為:margin是用來離隔元素與元素的間距;padding是用來離隔元素與內容的距離。margin用於結構離開元素使元素與元素互不相關;padding用於元素與內容之間的距離,讓內容(文字)與(包裹)元素之間有一段“呼吸間隔”。
margin在塊元素、內聯元素中的差別
HTML(這裡說的是html尺度,而不是xhtml)裡分兩種根本元素,即block和inline。望文生義,block元素就是以”塊”表示的元素(block-like elements),inline元素等於以”行”表示的元素(character level elements and text strings)。兩者表示的重要差異在於,在頁面文檔中block元素另起一行開端,並獨有一行。inline元素則同其他inline元素共處一行。
block元素(塊元素)年夜致有:P|H1|H2|H3|H4|H5|H6|UL|OL|PRE| DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS(跟著html5尺度的推動,一些元素將被破除,而一些新的元素將被引入)留意的是並不是一切的block元素的默許display屬性都是block,像table這類display:table的元素也是block元素。
inline元素(內聯元素)年夜致有:#PCDATA(即文本)| TT | I | B | BIG | SMALL|EM | STRONG | DFN | CODE |SAMP | KBD | VAR | CITE | ABBR | ACRONYM|A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO|INPUT | SELECT | TEXTAREA | LABEL | BUTTON
個中有類特別的元素:如img|input|select|textarea|button|label等,他們被稱為可置換元素(WordStrd element)。他們差別普通inline元素(絕對而言,稱non-replaced element)是:這些元素具有內涵尺寸(intrinsic dimensions),他們可以設置width/height屬性。他們的性質同設置了display:inline-block的元素分歧。
也許有同伙對非置換元素(non-replaced element)有點困惑,略微贊助年夜家懂得一下。非置換元素,W3C 中沒有給出明白的界說,但我們從字面可以懂得到,非置換元素對應著置換元素(replaced element),也就是說我們弄懂了置換元素的寄義,就懂了非置換元素。置換元素,W3C中給出了界說:“An element that is outside the scope of the CSS formatter, such as an image, embedded document, or applet”
從界說中我們可以懂得到,置換元素(replaced element)重要是指 img, input, textarea, select, object 等這類默許就有 CSS 格局化表面規模的元素。進而可知,非置換元素(non-replaced element)就是除 img, input, textarea, select, object 等置換元素之外的元素。
margin在塊級元素下,他的機能可以完整表現,高低閣下任你設定。且記住塊級元素的margin的參照基准是前一個元素即絕對於本身之前的元素有margin間隔。假如元素是第一個元素,則就是絕對於父元素的margin間隔(但第一個元素絕對於父元素margin-top而父元素又沒有設定padding-top/border-top的話要須要印證下面的垂直外邊距歸並的常識)
margin也能用於內聯元素,這是標准所許可的,然則margin-top和margin-bottom對內聯元素(對行)的高度沒有影響,而且因為界限後果(margin後果)是通明的,他也沒有任何的視覺影響。
這是由於界限運用於內聯元素時不轉變元素的行高度,假如你要轉變內聯元素的行高即相似文本的行間距,那末你只能應用這三個屬性:line-height,fong-size,vertical-align。請記住,這個影響內聯元素高度的是line-height而不是height,由於內聯元素是一行行的,定一個height的話,那這究竟是整段inline元素的高呢?照樣inline元素一行的高呢?這都說禁絕,所以同一都給每行定一個高,只能是line-height了。
margin-top/margin-bottom對內聯元素沒有多年夜現實後果,不外margin-left/margin-right照樣可以或許對內聯元素發生影響的。運用margin:10px 20px 30px 40px;,右邊這個css假如寫在inline元素上,他的後果年夜致是,高低有效果,右邊離他相鄰元素或許文本間隔為40px,左邊離他相鄰元素或許文本間隔為20px。你可以自行測驗考試一番。
最初在內聯元素中還有上文我們提到的非可置換inline元素(non-replaced element),這些個元素img|input|select|textarea|button|label固然是內聯元素,但margin照舊可以影響到他的高低閣下!
總結上去margin 屬性可以運用於簡直一切的元素,除表格顯示類型(不包含 table-caption, table and inline-table)的元素,並且垂直外邊距對非置換內聯元素(non-replaced inline element)不起感化。
負margin技巧及其運用
在margin一切的現實運用中,負margin技巧是我進修css路上最主要一課之一,很多高等運用和頁面上的疑問雜症都可以用負margin技巧來完成。margin技巧是那末的有效,限於篇幅我又不想敷衍了事,所以我決議專門為他寫一篇文章,具體的解釋他的後果、道理、及其運用。在此之前你可以先浏覽怿飛寫的由淺入深座談margin屬性這篇文章,年夜致懂得“margin參考線”的概念,以後再來檢查負margin技巧及其運用這篇文章。
罕見的閱讀器下margin湧現的bug
各種各樣寫了那末多,最初總結一些閱讀器中罕見的margin Bug吧,今後碰到margin下的結構成績可以檢查這裡找到處理的計劃,假如你還發明其他關於閱讀器下margin的Bug你可以揭橥留言,查對采用後我會實時添加出來,感激你的分享。
IE6中雙邊距Bug:
產生場所:當給父元素內第一個浮動元素設置margin-left(元素float:left)或margin-right(元素float:right)時margin加倍。
處理辦法:是給浮動元素加上display:inline;CSS屬性;或許用padding-left取代margin-left。
道理剖析:塊級對象默許的display屬性值是block,當設置了浮動的同時,還設置了它的外邊距就會湧現這類情形。或許你會問:“為何以後的對象和第一個對象之間就不存在雙倍邊距的Bug”?由於浮動都有其絕對應的對象,只要絕對於其父對象的浮動對象才會湧現如許的成績。第一個對象是絕對父對象的,而以後對象是絕對第一個對象的,所以以後對象在設置後不會湧現成績。為何display:inline可以處理這個雙邊距bug,起首是inline元素或inline-block元素是不存在雙邊距成績的。然後,float:left等浮動屬性可讓inline元素haslayout,會讓inline元素表示得跟inline-block元素的特征一樣,支撐高寬,垂直margin和padding等,所以div class的一切款式可以用在這個display inline的元素上。
IE6中浮動元素3px距離Bug:
產生場所:產生在一個元素浮動,然後一個不浮動的元素天然上浮與之接近會湧現的3px的bug。
處理辦法:左邊元素也一路浮動;或許為左邊元素添加IE6 Hack _margin-left:-3px;從而清除3px間距。
道理剖析:IE6閱讀器缺點Bug。
IE6/7負margin隱蔽Bug:
產生場所:當給一個有hasLayout的父元素內的非hasLayout元素設置負margin時,超越父元素部門弗成見。
處理辦法:去失落父元素的hasLayout;或許賦hasLayout給子元素,並添加position:relative;
道理剖析:IE6/7獨有的hasLayout發生成績。
IE6/7下ul/ol標志消逝bug:
產生場所:當ul/ol觸發了haslayout而且是在ul/ol上寫margin-left,後面默許的ul/ol標志會消逝。
處理辦法:給li設置margin-left,而不是給ul/ol設置margin-left。
道理剖析:IE6/7閱讀器Bug
IE6/7下margin與absolute元素堆疊bug:
產生場所:雙欄自順應結構中,左邊元素absolute相對定位,右邊的margin撐開間隔定位。在IE6/7下左邊運用了absolute屬性的塊級元素與左邊的自順應的文字內容堆疊。
處理辦法:把左邊塊級元素更改成內聯元素,好比把div改換為span。
道理剖析:這是因為IE6/IE7閱讀器將inline程度標簽元素和block程度的標簽元素沒有加以辨別厚此薄彼襯著了。屬於IE6/7閱讀器襯著Bug。
IE6/7/8下auto margin居中bug:
產生場所:給block元素設置margin auto沒法居中
處理辦法:湧現這類bug的緣由平日是沒有Doctype,然後觸發了ie的quirks mode,加上Doctype聲明便可以了。在《打敗IE的葵花寶典》裡給出的辦法是給block元素添加一個width可以或許處理,但依據自己親測,加with此種辦法是有效的,假如沒有Doctype即便給元素添加width也沒法讓block元素居中。
道理剖析:缺乏Doctype聲明。
IE8下input[button | submit] 設置margin:auto沒法居中
產生場所:ie8下,假如給像button如許的標簽(如button input[type="button"] input[type="submit"])設置{ display: block; margin:0 auto; }假如不設置寬度的話沒法居中。
處理辦法:可以給為input加上寬度
道理剖析:IE8閱讀器Bug。
IE8百分比padding垂直margin bug:
產生場所:當父元素設置了百分比的padding,子元素有垂直的margin的時刻,就似乎父元素被設置了margin一樣。
處理辦法:給父元素加一個overflow:hidden/auto。
道理剖析:IE8閱讀器Bug。