• 整理删除重复数据的语句


    开场白:前边一段为前期数据准备

    后边t-sql为筛选出重复的行数-1,即为需要删除的数据,其中guid必须唯一

    --前期准备
    SELECT ProviderGUID,bankaccounts,count(1) as bum INTO #temp1 from p_ProviderBanks  group by ProviderGUID,bankaccounts 
    having count(1)>1
    
    SELECT rowid=IDENTITY(INT,1,1),flag=0, providerguid,a.ProviderBankGUID,a.BankAccounts INTO #temp2 FROM p_ProviderBanks a WHERE EXISTS (SELECT * FROM #temp1 WHERE a.ProviderGUID=ProviderGUID AND  a.BankAccounts=BankAccounts)
    
    SELECT TOP (10-1) * FROM #temp1
    SELECT rowid=IDENTITY(INT,1,1),flag=0,providerguid,BankAccounts,bum INTO #temp3  FROM #temp1
    SELECT * FROM #temp2
    SELECT * FROM #temp3
    DROP TABLE #temp3
    
    
    --删除重复数据
    BEGIN 
    SET NOCOUNT ON 
    DECLARE @num INT 
    DECLARE @rowid INT 
    DECLARE @providerguid UNIQUEIDENTIFIER
    DECLARE @bankaccounts VARCHAR(400) 
    SELECT @rowid=MIN(rowid) FROM #temp3 WHERE flag=0
    DECLARE @strsql NVARCHAR(200)
    --CREATE TABLE erpbak.dbo.tempdelete 
    --(
    --providerbankguid UNIQUEIDENTIFIER
    --)
    PRINT @rowid
    WHILE @rowid is not NULL
    BEGIN
        SELECT @providerguid=ProviderGUID,@bankaccounts=BankAccounts,@num=bum FROM #temp3 WHERE  rowid=@rowid
        SET @num=@num-1
        --PRINT @bankaccounts
        --PRINT @num
        SET @strsql='
        insert into erpbak.dbo.tempdelete 
        SELECT TOP '+CAST( @num AS VARCHAR(5) )+'  ProviderBankGUID FROM #temp2 WHERE BankAccounts='''+CAST(@bankaccounts AS VARCHAR(100))+''' AND ProviderGUID='''+CAST(@providerguid AS VARCHAR(100))+''''
        --PRINT @strsql
        EXEC sp_executesql @strsql
        UPDATE #temp3 SET flag=1 WHERE rowid=@rowid
        SELECT @rowid=MIN(rowid) FROM #temp3 WHERE flag=0
    END
    SET NOCOUNT OFF 
    END
    **********初心不改,方得始终。
  • 相关阅读:
    OpenGL入门1.3:着色器 GLSL
    OpenGL入门1.2:渲染管线简介,画三角形
    C++回调,函数指针
    JavaScript 比较和逻辑运算符
    JS 运算符
    JS 函数
    JS 对象
    JS 数据类型
    JS 变量
    JS 注释
  • 原文地址:https://www.cnblogs.com/salv/p/11764067.html
Copyright © 2020-2023  润新知