zoukankan      html  css  js  c++  java
  • 生成SQL SERVER数据库脚本

    数据库迁移,如果源库的SQL SERVER版本与目标库相同,或更低,没有什么问题,可以采用2种方式:

    1)备份、还原的方式

    2)直接拷贝数据库文件的方式(从源库分离,拷贝到目标库附加)


    但如果源库的SQL SERVER版本比目标库高,就没办法了,只好用 生成数据库脚本 + 导出导入数据 的老土办法了。生成数据库脚本好像也有个选项可以带数据,我没试过,但有大虾说这只适合少量数据的情况。


    生成数据库脚本,有些地方值得一提:


    1、权限默认没有选上。应该选上。点“高级”可发现


    这样生成的脚本,就可以将权限带出来,如:

    GRANT EXECUTE ON [dbo].[news_prd_GetForSlideShow] TO [spider] AS [dbo]
    GO

    存储过程[dbo].[news_prd_GetForSlideShow]  的 权限EXECUTE 赋给了用户spider


    这里有一个比较古怪的现象,就是你想将用户的权限导出来的话,不能只选用户导出,要将表、存储过程、用户都选上,高级选项里再选上“生成对象级权限”,生成的脚本里才含有某个表对于某用户的权限如何如何,某个存储过程对某个用户如何如何。


    2、在目标库,将用户与登录名映射。

    数据库的用户与登录名是分开的。二者是映射的关系。一个登录名可以映射多个数据库里的用户,但每个数据库只能映射一个;而用户则只能映射一个登录名。

    对于数据库迁移,很可能出现登录名跟之前发生变化的状况,或者要新增,或者是映射现有的。之前我一直习惯用户名和登录名的名字相同,迁移之后,搞得很狼狈。

    在导出来的脚本中,对于用户名和登录名部分,会有如下语句:

    /****** Object:  User [spider]    Script Date: 05/18/2012 10:09:27 ******/
    CREATE USER [spider] FOR LOGIN [spider] WITH DEFAULT_SCHEMA=[spider]
    GO

    意思就是说将用户名 [spider] 映射到登录名 [spider]。(习惯了两个名字取得一模一样)

    但在目标数据库实例里面,不存在一个这么一个叫[spider]的登录名,只有一个叫[big_spider],那应该将语句改成

    CREATE USER [spider] FOR LOGIN [big_spider] WITH DEFAULT_SCHEMA=[spider]
    GO


    或者硬着头皮运行脚本,报错,但用户名还是会建立起来,再加以修改:

    EXEC sp_change_users_login 'update_one' , 'spider' , 'big_spider' ;

    注意:

    如果生成的用户脚本,有 WITHOUT LOGIN,则是指定不应将用户映射到现有登录名之意,

    CREATE USER [myuser] WITHOUT LOGIN WITH DEFAULT_SCHEMA=[myuser]
    GO

    这种情况下,执行以上EXEC sp_change_users_login语句,会报错:

    正在终止此过程。缺少User 名称'myuser' 或该名称无效


    仔细观察该用户,会是这种情况:





  • 相关阅读:
    ASP.NET MVC 扩展相关
    新.NET开发十大必备工具
    c#调用存储过程两种方法
    TweakUI取消pc喇叭声
    baidu mp3竟然还加密,太扯了
    NTLM在使用代理服务器的情况下,第三次握手可能出错
    httpclient解析gzip网页
    eclipse不能自动编译工程的解决方法
    bat设置环境变量
    java的ZipOutputStream压缩文件的两个问题(乱码和每次zip后文件md5变化)
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258066.html
Copyright © 2011-2022 走看看