引用皱建的例子 详见《中文版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" -------- 当然单个用户的话上面两个函数都没问题! 而这个测试正是多个用户处理数据时的情况 现在我想你应该明白"锁"在开发中的作用了吧
谢谢你啊!
--得到新编号的函数
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"
--------
当然单个用户的话上面两个函数都没问题!
而这个测试正是多个用户处理数据时的情况
现在我想你应该明白"锁"在开发中的作用了吧
谢谢 这为朋友