狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點晴永久免費OA]如何查詢Sql Server中所有默認值約束并刪除它們

admin
2019年9月28日 20:48 本文熱度 3106
今天遇到一個問題,就是要將某數(shù)據(jù)庫中所有PNumber列刪除,這個數(shù)據(jù)庫基本上所有表都有這個字段,所以我寫了一段sql來刪除所有的PNumber列,如下:
declare @columnname nvarchar(1000)
declare my_cur cursor local for 
select b.name from sys.syscolumns a
inner join sys.tables b on a.id=b.object_id 
where a.name=''PreNumber''

open my_cur
fetch next from my_cur into @columnname
while @@fetch_status=0
begin  
exec (''alter table ''+@columnname+'' drop column PreNumber'') 
fetch next from my_cur into @columnname
end

close my_cur
deallocate my_cur

sql是沒有問題的,但執(zhí)行的時候報了類似下面的錯誤:
消息 5074,級別 16,狀態(tài) 1,第 2 行
對象''DF_XXXX_PNumber_Default'' 依賴于 列''PNumber''。
消息 4922,級別 16,狀態(tài) 9,第 2 行
由于一個或多個對象訪問此列,ALTER TABLE DROP COLUMN Creator 失敗。


原因就是創(chuàng)建PNumber列的時候為PNumber列創(chuàng)建了默認值,所以我們通過sql命令刪除時會要求我們先刪除對應(yīng)的默認值約束(如果直接在設(shè)計器中刪除不會有此要求,設(shè)計器會同時刪除對應(yīng)的約束)。

那么我們要怎么找出數(shù)據(jù)庫中所有表中PNumber列的默認值約束呢?這時候就需要利用sys.default_constraints目錄視圖了。

sys.default_constraints目錄視圖


我們所有定義的默認值都可以通過這個目錄視圖查詢出來,sys.default_constraints中有幾個重要的列:
1,Name 約束名稱
2,parent_object_id 所屬表的表標(biāo)識
3,parent_column_id 默認值對應(yīng)列的列標(biāo)識
4,definition 默認值的定義
5,is_system_named 約束名稱是不是自已定義的, 0代表是自己定義的,1代表是系統(tǒng)定義的。

有了這些信息,我可以鏈接sys.columns表與object_name函數(shù)查出默認值對應(yīng)的表名與列名,sql如下:
select name as 默認值名稱,
object_name(t.parent_object_id) as 表名,
(select sys.columns.name from sys.columns 
where sys.columns.column_id=t.parent_column_id 
and sys.columns.object_id=t.parent_object_id) as 列名,
t.definition from sys.default_constraints t

如同批量刪除列一樣,我們可以寫一個游標(biāo),循環(huán)刪除所有的默認值。
declare @name varchar(100)
declare @tablename varchar(100)
declare my_cur cursor local for 
select a.name,a.tablename from 
(select name,
object_name(t.parent_object_id) as tableName,
(select sys.columns.name from sys.columns 
where sys.columns.column_id=t.parent_column_id 
and sys.columns.object_id=t.parent_object_id) as columnName,
t.definition from sys.default_constraints t) a where columnname=''PNumber''

open my_cur
fetch next from my_cur into @name,@tablename
while @@fetch_status=0
begin  
exec (''alter table ''+@tablename+'' drop constraint ''+@name) 
fetch next from my_cur into @name,@tablename
end

close my_cur
deallocate my_cur

查詢指定表cs_test2_list中字段time7是否存在約束值:
select a.name from (select name,object_name(t.parent_object_id) as tableName,(select sys.columns.name from sys.columns where sys.columns.column_id=t.parent_column_id and sys.columns.object_id=t.parent_object_id) as columnName,t.definition from sys.default_constraints t) a where columnname=''time7'' and tablename=''cs_test2_list''

該文章在 2019/9/28 20:48:02 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved