ifexists(select*fromdbo.sysobjectswhereid=object_id(n'[dbo].[p_qry]')andobjectproperty(id,n'isprocedure')=1)
dropprocedure[dbo].[p_qry]
go/*--
查詢重覆記錄的通用儲存過程
可以查詢出表中那些資料是重複的,這裡的重複,是指除主鍵外重複的記錄
如果表中有主鍵,請指定主鍵.
如果表中有標識字段,而且標識欄位無重複,請在呼叫時,將主鍵指定為標識字段
如果標識字段重複,不能用此儲存過程
--2004.4--*/
createprocp_qry
@tbnamesysname, --要查詢的表名
@keyfdnamesysname=null--表中的主鍵,如果未指定,則表中無主鍵
asdeclare@nokeybit,@fdvarchar(8000),@tjvarchar(8000)
setnocounton
ifisnull(@keyfdname,'')=''
begin
select@keyfdname=cast(newid()aschar(36)),@nokey=1
exec('altertable['+@tbname+']add['+@keyfdname+']decimal(38,0)identity(1,1)')
endselect@fd='',@tj=''
select@fd=@fd+',['+name+']'
,@tj=@tj+'['+name+']=a.['+name+']and'
fromsyscolumns
whereobject_name(id)=@tbnameandname<>@keyfdname
set@fd=substring(@fd,2,8000)
exec('select'+@fd+'from['+@tbname+']a
whereexists(select1from['+@tbname
+']wherea.['+@keyfdname+'])'">'+@tj+'['+@keyfdname+']<>a.['+@keyfdname+'])')
if@nokey=1
exec('altertable['+@tbname+']dropcolumn['+@keyfdname+']')
setnocountoff
go--呼叫示例
--建立測試資料
createtable表(f1int,f2int,f3int,f4int,f5int)
insertinto表
select1,1,1,1,1
unionallselect2,1,1,1,1
unionallselect3,2,1,23,1
unionallselect4,2,3,1,3
unionallselect5,1,1,1,1
go--呼叫通用儲存過程實現樓主的查詢
execp_qry'表','f1'
--刪除測試環境
droptable表
/*--測試結果
f2 f3 f4 f5
--------------------------------------------
1 1 1 1
1 1 1 1
1 1 1 1
--*/
SQL查詢重覆記錄,刪除重覆記錄
1 查詢表中多餘的重覆記錄,重覆記錄是根據單個字段 docid 來判斷 select from tablename where docid in select docid from tablename group by docid h ing count docid 1 例二 select from...
Oracle SQL查詢刪除重覆記錄
oracle sql查詢刪除重覆記錄有兩種方式一種是建立乙個臨時表,就不做說明了.另一種是用oracle的rowid來刪除 create table student name varchar 12 姓名 varchar2 2 性別 表已建立.sql insert into student value...
sql 重覆記錄和重覆記錄數
如果table1有兩個column adress和pepole,那麼下面的sql可以找出table1裡的重覆記錄和重覆記錄數 create table table1 adress nvarchar 10 pepole nvarchar 10 insert table1 select 寧波 張三 nb...