CHECKSUM返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引。
语句意思是指当ta某行的校验值在ta中存在,就将该行查询出来。

解决方案 »

  1.   

    create table #a(cphzid int,itemsid int ,Name varchar(20),VoteCount int,SubjectID int, Username varchar(20),userguid varchar(80),bumen varchar(20))
    INSERT INTO #a
    SELECT 1677,5,'提拔',0,2,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1678,6,'不提拔',0,2,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1679,7,'预备',0,2,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1680,10,'提拔',0,3,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1681,11,'不提拔',0,3,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1682,12,'王五11',0,4,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1683,13,'达到',0,5,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 1684,5,'提拔',0,2,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 1685,6,'不提拔',0,2,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 1686,7,'预备',0,2,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 1687,10,'提拔',0,3,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 1688,11,'不提拔',0,3,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 1689,12,'王五11',0,4,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 1690,13,'达到',0,5,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部'create table #b(cphzid int,itemsid int ,Name varchar(20),VoteCount int,SubjectID int, Username varchar(20),userguid varchar(80),bumen varchar(20))
    INSERT INTO #b
    SELECT 677,5,'提拔',0,2,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 678,6,'不提拔',0,2,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 679,7,'预备',0,2,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 680,10,'提拔',0,3,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 681,11,'不提拔',0,3,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 682,12,'王五11',0,4,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 683,13,'达到',0,5,'黄国锋','99CA53C3-5139-4A97-B51-776032078DE1','行政管理部' UNION ALL
    SELECT 684,5,'提拔',0,2,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 685,6,'不提拔',0,2,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 686,7,'预备',0,2,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 687,10,'提拔',0,3,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 688,11,'不提拔',0,3,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 689,12,'王五11',0,4,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部' UNION ALL
    SELECT 690,13,'达到',0,5,'杨东视','A0EB3B4B-947D-4B06-8911-B4D237D3A1','行政管理部'select checksum(*),* from #a
    (无列名) cphzid itemsid Name VoteCount SubjectID Username userguid bumen
    -2115768216 1677 5 提拔 0 2 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    1726956757 1678 6 不提拔 0 2 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -1797193611 1679 7 预备 0 2 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    1591992425 1680 10 提拔 0 3 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -1678813996 1681 11 不提拔 0 3 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -1124333762 1682 12 王五11 0 4 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    1523028167 1683 13 达到 0 5 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -1644641069 1684 5 提拔 0 2 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    1525969006 1685 6 不提拔 0 2 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    -1996868402 1686 7 预备 0 2 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    -1560750893 1687 10 提拔 0 3 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    -2014027666 1688 11 不提拔 0 3 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    -2132331644 1689 12 王五11 0 4 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    1188865149 1690 13 达到 0 5 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部select checksum(*),* from #b
    (无列名) cphzid itemsid Name VoteCount SubjectID Username userguid bumen
    31715370 677 5 提拔 0 2 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -420526953 678 6 不提拔 0 2 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    350289975 679 7 预备 0 2 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -555491286 680 10 提拔 0 3 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    468669591 681 11 不提拔 0 3 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    1023149949 682 12 王五11 0 4 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    -624455548 683 13 达到 0 5 黄国锋 99CA53C3-5139-4A97-B51-776032078DE1 行政管理部
    502842512 684 5 提拔 0 2 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    -621514707 685 6 不提拔 0 2 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    150615181 686 7 预备 0 2 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    586732688 687 10 提拔 0 3 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    133455916 688 11 不提拔 0 3 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    15152070 689 12 王五11 0 4 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部
    -958618561 690 13 达到 0 5 杨东视 A0EB3B4B-947D-4B06-8911-B4D237D3A1 行政管理部select * from #a where checksum(*)  in (select checksum(*) from #b) 
    (0 行受影响)
      

  2.   

    checksum意思是和校验,与hash又有关 
    实验 
    declare @a int 
    declare @b int 
    set @a=6 
    set @b=31 
    select checksum(@a,@b),checksum(@a)*16+checksum(@b),checksum(@a),checksum(@b) 当 @a=1 @b=32 时 checksum(@a,@b)=checksum(@a)*16+checksum(@b) 
    换几个参数发现有时候不等 
    再实验又发现 checksum(1,16)=0 
    推断 checksum(@a,@b)与checksum(@a),checksum(@b) 
    的16进制数有关 而却不只一两种算法 ---- 
      

  3.   

    IF OBJECT_ID('tb1') IS NOT NULL 
        DROP TABLE tb1
    Go
    CREATE TABLE tb1(stuid INT,subid INT,score INT)
    Go
    INSERT INTO tb1
    SELECT 1,1,65 UNION ALL
    SELECT 1,2,58 UNION ALL
    SELECT 2,1,58 UNION ALL
    SELECT 2,3,98 UNION ALL
    SELECT 3,1,85 UNION ALL
    SELECT 3,2,56 UNION ALL
    SELECT 3,3,90 
    GO
    IF OBJECT_ID('tb2') IS NOT NULL 
        DROP TABLE tb2
    Go
    CREATE TABLE tb2(stuid INT,subid INT,score INT)
    Go
    INSERT INTO tb2
    SELECT 1,1,65 UNION ALL
    SELECT 1,2,58 UNION ALL
    SELECT 2,1,58 UNION ALL
    SELECT 2,3,98 UNION ALL
    SELECT 3,1,85 UNION ALL
    SELECT 3,2,56 UNION ALL
    SELECT 3,3,91 
    GO
    select * from tb1 where checksum(*)  in (select checksum(*) from tb2) 
    /*
    stuid       subid       score
    ----------- ----------- -----------
    1           1           65
    1           2           58
    2           1           58
    2           3           98
    3           1           85
    3           2           56(6 行受影响)
    */