SQLSERVER中全局临时表:是由“##”(即两个连续的“#”号)为前缀的;
UserID:是内存变量;以下假设UserID值为“001”
ID:是用户自定义的字段别名;这条语句执行完返回的结果应该是:一个OBJECT_ID,即当前数据库中表名为“##LoginUser001”的对象的ID;

解决方案 »

  1.   

    那还要请教一下前辈,我在另一个过程中已经定义了如果登陆创建一个临时表 代码如下
    Function UserLoginRegister(UserID As String) As Boolean
    '创建登录标识(即创建用户名对应的临时表)
        UserID = txtUserName.text
        Dim cnn As Object
        Set cnn = CreateObject("ADODB.Connection")
        cnn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=xskf;Data Source=."
        cnn.Execute "Create TABLE ##LoggedUser" & UserID & "(userid varchar(1))"End Function
     为什么在   Function IsLogged(UserID As String) As Boolean
    '判断指定用户是否登录,已登录返回True
        Dim rst As Object
        Dim cnn As Object
        Set cnn = CreateObject("ADODB.Connection")
        cnn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=xskf;Data Source=."
        Set rst = cnn.Execute("Select OBJECT_ID('##LoggedUser" & UserID & "') AS ID")
        If Not IsNull(rst!ID) Then
        IsLogged = True
        End If
        rst.Close
    End Function
    执行后结果返回已经创建了一'##LoggedUser" & UserID & "'临时表,可在判断指定用户是否登录在中判断rst!ID为什么还是空呢,请教我该怎么改呢?
      

  2.   

    哦,看出来了,我想你的 '##LoginUser' & UserID 这个表被创建在 tempdb 这个库里了,而不是在您的 xskf 库中,所以你要去 tempdb 库查 select object_id('##LoginUser' & UserID) 才行。
      

  3.   

    '那还要请教一下前辈,我在另一个过程中已经定义了如果登陆创建一个临时表 代码如下
    Function UserLoginRegister(UserID As String) As Boolean
        '创建登录标识(即创建用户名对应的临时表)
        UserID = txtUserName.Text
        Dim cnn As Object
        Set cnn = CreateObject("ADODB.Connection")
        cnn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=xskf;Data Source=."
        cnn.Execute "Create TABLE ##LoggedUser" & UserID & "(userid varchar(1))"End Function
    '为什么在Function IsLogged(UserID As String) As Boolean
        '判断指定用户是否登录,已登录返回True
        Dim rst As Object
        Dim cnn As Object
        Set cnn = CreateObject("ADODB.Connection")
        cnn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=tempdb;Data Source=."
        Set rst = cnn.Execute("Select OBJECT_ID('##LoggedUser" & UserID & "') AS ID")
        If Not IsNull(rst!ID) Then
        IsLogged = True
        End If
        rst.Close
    End Function
    '执行后结果返回已经创建了一 '##LoggedUser" & UserID & "'临时表,可在判断指定用户是否登录在中判断rst!ID为什么还是空呢,请教我该怎么改呢?
      

  4.   

    前辈,改成tempdb,比如我用管理员这个用户名登录后,再次用管理员登录会提示此用户已登录了,可是我用别的用户名(比如调度)登陆,为什么会提示数据库中已经存在##LoggedUser管理员的对象,我用调度登录应该是创建##LoggedUser调度的临时表呀
    登录代码如下,请问有什么问题吗
    Private Sub 登录_Click()    If IsLogged(txtUserName) Then
            MsgBox "此用户已登录!"
        Else
       ,以下是验证用户名和密码的过程
            rs2.Open "select * from tb_power where 操作员='" + txtUserName.text + "'and 密码='" + ID + "'", cnn, adOpenStatic
            If rs2.RecordCount > 0 The   
                Load MDIForm1
            Unload Me
             UserLoginRegister Me.txtUserName'这个应该调用是创建以用户名为临时表的过程
                End If
        rs2.Close
         
        End IfEnd Sub
      

  5.   


    其实这种临时表“前缀为##号”,在连接未关闭时是一直会存在的。
    比如:
    假设有三个客户端以“管理员”用户连接某个数据库后,只要这三个客户端的任意一个客户端创建过“##LoginUser管理员”这个表,那么在他们三个均未断开连接时,这个表“##LoginUser管理员”还是会存在的。
    只有当这三个客户端都断开与该数据库的连接以后,表“##LoginUser管理员”才会被SQLSERVER服务自动删除;