锁是和事物都是任何数据库必须的基本功能.

解决方案 »

  1.   

    那我看了怎么就是不太理解啊!
     谢谢你啊!
      

  2.   

    谁能帮我详细的解释一下啊!!!
      

  3.   

    引用皱建的例子 详见《中文版SQL Server 2000开发与管理应用实例》一书 p132--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
    --得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(8)
    AS
    BEGIN
    RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb)
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--Test
    1.在tempdb数据库中创建上述测试函数和表
    2.打开"记事本" 编写一个a.bat的批处理文件.文件内容如下:
      osql /E/d"tempdb" /Q" DECLARE @i int SET @i=0 WHILE @i<10000 BEGIN INSERT tb(col) VALUES(@i) SET @i=@i+1 END"
    3.将a.bat复制 5份
    4.选中a.bat复制出来的所有文档 按回车执行这些批处理文件
    5.可以观察到各批处理文件执行窗口!----------上面是不带锁的函数CREATE FUNCTION f_NextBH()
    RETURNS char(8)
    AS
    BEGIN
    RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))  --注意和上面比较
    END
    GO
    --在表中应用函数
    CREATE TABLE tb(
    BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--Test
    测试方法同上只是批处理的a.bat文件有所改动
    osql /E/d"tempdb" /Q" DECLARE @i int SET @i=0 WHILE @i<10000 BEGIN BEGIN TRAN INSERT tb(col) VALUES(@i) COMMIT TRAN SET @i=@i+1 END"
    --------
    当然单个用户的话上面两个函数都没问题!
    而这个测试正是多个用户处理数据时的情况 
    现在我想你应该明白"锁"在开发中的作用了吧
      

  4.   

    有点懂了 
    谢谢 这为朋友