--如果有并发操作,要写事务,锁定表

解决方案 »

  1.   

    我问过同样问题,已经得到解决*****************************************************
    (1)多用户环境
    (2)目的:根据表名与字段名以及ID号取得某字段值CREATE PROCEDURE bdms_GetFiledValue@strTableName nvarchar(30),
    @strFieldName1 nvarchar(30),
    @strFieldName2 nvarchar(30),
    @strValue nvarchar(4000) output AS
    set nocount ondeclare @sql nvarchar(1000)create table #temp(strValue nvarchar(1000))
    insert #temp exec('select ' + @strFieldName1 + ' from  ' +@strTableName
    +N' where ' +@strFieldName2+N' = '+@lngID )
    select  @strValue=(select * from #temp)
    drop table #tempGO
    **********************************************************************************我的问题是:
    (1)多用户环境下,如果第一个人正在执行本过程,而且已创建了一个临时表#temp,这时如果另一个人也来执行本过程,因为调用的是同一个存储过程,因此执行的是相同的代码,那么当每二个人在试图创建临时表#temp时,由于第一个人已创建了临时表#temp而且没有删除,因此存在同名的情况因而会出错.这样做假设也许比较极端,但也不能说完全没有可能.怎么办?(2)此问题如果不用临时表,用游标也行,但同在存在多用户环境下的同名游标情况.怎么办?(3)SQL SERVER 的运行机制我不是很清楚,是不是某个用户在调用某个存储过程时,只要该存储过程未执行完,该存储过程都处于锁定状态?也就是说,是不是不会出现同一时间多个用户执行同一存储过程的情况?
    ****************************************************************
    你不用担心这个问题,存储过程都会处于锁定状态,直到用户释放时**********************************************************以上是lsp69(浪子神剑)的答复.怎么样?分是加给我还是加给lsp69(浪子神剑)呢?呵呵