sqlserver 如何找到主鍵爲空值的字段

做爲主鍵,正常情況下不應該有空值,可是最近在做ogg轉化時,發現之前的sqlserver主鍵里居然有空值。

當然,他不是單主鍵,他是多主鍵組合。 在這裏紀錄一下,以便以後尋找方便。


--1.因可能多次操作,先刪除之前生成的表aaa
drop table pdaux.dbo.aaa

--2.把找到的表和字段生成到另一個庫裏
select tablename,colname,xtype into pdaux.dbo.aaa from
(
select o.name as tablename,c.name as colname,k.colid as 字段序號,k.keyno as 索引順序,c.xtype from sysindexes i  
join sysindexkeys k on i.id = k.id and i.indid = k.indid  
join sysobjects o on i.id = o.id  
join syscolumns c on i.id=c.id and k.colid = c.colid  
where o.xtype = 'U' 
and exists(select 1 from sysobjects where xtype = 'PK' and name = i.name)  
) as A

--3.再插入2個字段,並把字段類型寫進去
alter table pdaux.dbo.aaa add typename varchar(10), nullcount int
update pdaux.dbo.aaa set typename = (select top 1 name from systypes where xtype = pdaux.dbo.aaa.xtype)

--4. 字符型的字段更新

Declare @tablename varchar(50)
Declare @colname varchar(50)
declare T_cursor01 cursor for select tablename,colname from pdaux.dbo.aaa where typename in ('varchar','nvarchar') and nullcount is null

--int,varchar,binary,datetime,numeric,tinyint,bigint,nvarchar,bit


open T_cursor01
fetch next from T_cursor01 into @tablename,@colname
while @@fetch_status=0 
begin  
Declare @sql nvarchar(500)
--Set @sql = 'Select count(0) as count from '+ @tablename +' where '+ @colname +' = '''''
Set @sql = 'update pdaux.dbo.aaa set nullcount = (select COUNT(0) from '+ @tablename +' where '+ @colname +' = '''') where tablename = '''+ @tablename +''' and colname = '''+ @colname + ''''
print @sql
execute sp_executesql @sql
fetch next from T_cursor01 into @tablename,@colname
end 
close T_cursor01 
deallocate T_cursor01


--5.非字符的字段更新(好象有一些系統表,導致出錯,但會跳過,可執行多次)

Declare @tablename varchar(50)
Declare @colname varchar(50)
declare T_cursor01 cursor for select  tablename,colname from pdaux.dbo.aaa where typename not in ('varchar','nvarchar') and nullcount is null

--int,varchar,binary,datetime,numeric,tinyint,bigint,nvarchar,bit


open T_cursor01
fetch next from T_cursor01 into @tablename,@colname
while @@fetch_status=0 
begin  
Declare @sql nvarchar(500)
--Set @sql = 'Select count(0) as count from '+ @tablename +' where '+ @colname +' = '''''
Set @sql = 'update pdaux.dbo.aaa set nullcount = (select COUNT(0) from '+ @tablename +' where '+ @colname +' is null) where tablename = '''+ @tablename +''' and colname = '''+ @colname + ''''
print @sql
execute sp_executesql @sql
fetch next from T_cursor01 into @tablename,@colname
end 
close T_cursor01 
deallocate T_cursor01

--5.搜索出含有主鍵爲空值的表名

select distinct tablename from PDAUX.dbo.aaa where nullcount > 0


--6.拼接sql

select 'update '+ tablename +' set '+ colname +' = '' '' where '+ colname +' = '''''

from PDAUX.dbo.aaa where nullcount > 0





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章