当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 服务器端server.exe 客户端client.exe,在同一电脑上没有问题,但不同电脑有问题,连接不上的 以下是源码: client.exe private sub command1_click() isconnectionopen = false winsock1.close winsock1.remotehost = text1 填好socket的对方地址 winsock1.rem......
    摘要: use bmss declare @aa varchar(64) set @aa=m select x,@aa,y from dbo.test 执行结果: x noclumnname y a m 5 b m 3 如果把select x,@aa,y from dbo.test换成exec(select x,+@aa+,y from dbo.test)就可以正常显示m字段的内容 ......


简单SQL问题

我从别的机器将数据库attach到自己的机器上,建立了一个用户,然后将这个用户定义到新拷贝的数据库时出现一个错误提示,说这个用户已经存在,这个用户名以前在别的机器里用的,我想还用这个,不知道这个问题该怎么解决?还有,我怎样新建立一个数据库,要求和原来的数据库的结构一摸一样?

NO.1   作者: libin_ftsafe

这是个孤立用户的问题,以下为转载邹老大帖子中的内容:  
  ---------------------------------------------------------------------------------  
   
  孤立用户是指脱离了登录,独立存在于数据库中的用户  
  关于孤立用户的产生原因及解决办法,参考sql联机丛书"孤立用户"部分  
  联机帮助上是删除孤立用户,但还有没有其他办法呢?  
   
   
   
  --在master中创建此存储过程,然后调用此存储过程即可(注意参数为要解决孤立用户的数据库名)  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N[dbo].[p_validatelogin])   and   OBJECTPROPERTY(id,   NIsProcedure)   =   1)  
  drop   procedure   [dbo].[p_validatelogin]  
  GO  
   
  /*--解决还原数据库产生的孤立用户问题  
     
    孤立用户是指脱离了登录,独立存在于数据库中的用户  
    关于孤立用户的产生原因及解决办法,参考sql联机丛书"孤立用户"部分  
    联机帮助上是删除孤立用户  
   
    本存储过程通过另一方法来解决此问题:  
      搜索指定数据库中的系统表  
      如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系  
      如果孤立用户的登录不存在,则为它建立一个登录      
   
    存储过程处理了两种情况:  
    一种情况是在还原数据库前已经创建了登录  
      但还原数据库后,无法用该登录访问还原的数据库  
    另一种情况是,当前sql实例中,没有还原数据库中的登录用户  
   
  --邹建   2004.07(引用请保留此信息)--*/  
   
  /*--调用示例  
     
    exec   p_validatelogin   db_test  
  --*/  
  create   proc   p_validatelogin  
  @dbname   sysname   --孤立用户所在的数据库名(存储过程自动搜索此库中的孤立用户进行解决)  
  as  
  if   db_id(@dbname)   is   null  
  begin  
    print   无此数据库  
    return  
  end  
   
  declare   @s   nvarchar(4000)  
   
  --更新已经有登录,但   sid   不匹配的用户的sid  
  set   @s=update   a   set   sid=b.sid  
  from   [+replace(@dbname,],]])+].dbo.sysusers   a    
    join   master.dbo.syslogins   b   on   a.name=b.name  
  where   a.islogin=1   and   a.sid<>b.sid  
  exec   sp_configure   allow   updates,1   reconfigure   with   override  
  exec   sp_executesql   @s  
  exec   sp_configure   allow   updates,0   reconfigure   with   override  
   
  --为不存在的登录添加登录信息  
  set   @s=declare   @sid   binary(16),@loginame   sysname  
    declare   tb   cursor   local   for  
    select   name,sid   from   [+replace(@dbname,],]])  
    +].dbo.sysusers   a  
    where   islogin=1   and   name   not   in(dbo,guest)   and   not   exists(  
      select   1   from   master.dbo.syslogins  
      where   name=a.name)  
    open   tb  
    fetch   tb   into   @loginame,@sid  
    while   @@fetch_status=0  
    begin  
      exec   sp_addlogin   @loginame=@loginame,@sid=@sid  
      fetch   tb   into   @loginame,@sid  
    end  
    close   tb  
    deallocate   tb  
    exec   sp_executesql   @s  
  go

NO.2   作者: vivianfdlpw

1.   你复制的数据库可能有某些对象的owner是原来的用户,不是dbo,把它们改成dbo  
  2.   你可以先还原数据库,然后sp_msforeachtable   truncate   table   ?清空所有数据  
        或者参看:      
        http://community.csdn.net/Expert/topic/4159/4159587.xml?temp=.7299921

NO.3   作者: RenRevid

SQL   SERVER的用户有两种级别,一种是服务器级别的。一种数据库级别的。如果服务其中已存在该用户,则不能在单数据库上重建,只需要简单给于权限即可

NO.4   作者: hglhyy

楼主看下你的这个用户原来是对应的那个数据库上,到这个数据库里把这个用户删除  
   
  再就可以在SQL里加入这个用户了,同时指定所对应的数据库!


    摘要: 程序运行时需要启动其他exe服务,当时不需要它显示出来,怎么让它一启动就最小化?老是挡着当前程序!! ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE