精华内容
下载资源
问答
  • SQL Server 如何生成更改脚本

    千次阅读 2018-05-24 18:03:06
    更改脚本是一个包含以后可以应用到数据库(通过在解决方案资源管理器中选择更改脚本并从快捷菜单上选择“运行”)的更改的文件。如果还没有准备好更新数据库,可以选择保存更改脚本。例如,您对表设计器中的表所做的...
    SQL Server 如何生成更改脚本


    您可以选择在使用表设计器时保存更改脚本。更改脚本是一个包含以后可以应用到数据库(通过在解决方案资源管理器中选择更改脚本并从快捷菜单上选择“运行”)的更改的文件。


    如果还没有准备好更新数据库,可以选择保存更改脚本。例如,您对表设计器中的表所做的更改可能与其他用户所做的更改有冲突,或者您当前可能没有更改数据库所需的安全权限。


    注意


    显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的现用设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。


    保存更改脚本


     1.从“表设计器”菜单中单击“生成更改脚本”。每当您有未保存的数据库更改时,此命令就可用。
     2.在“保存更改脚本”对话框中,选择“是”。


    注意
    如果选择“每次保存都自动生成更改脚本”选项,则每次保存修改的表时都会提示您生成更改脚本。


     3.“另存为”对话框显示已保存的更改脚本的默认文件名。接受默认文件名或键入一个不同的名称,再选择“保存”。


    注意
    如果您正在处理数据库项目(该项目是在“新建项目”对话框中创建的),则更改脚本将与该项目一起保存在解决方案资源管理器的“更改脚本”文件夹中。


    每次保存更改脚本时,解决方案资源管理器中的“更改脚本”文件夹中都会创建一个新的文本文件。
    更改脚本文件列出了所有发生更改的表以及这些表的更改方式(使用 DROP TABLE、ALTER TABLE 或 CREATE TABLE SQL 语句)。更改脚本文件同时包含所有错误处理代码,这些代码为清除临时表或回滚作为未成功更改部分(未能保存的更改)的事务所需。此外,更改脚本文件包含使脚本对数据库成功运行的代码,以及描述脚本在运行过程中所做工作的代码(Print 语句)。对于适用的情况,更改脚本还将包括在正被修改的表上设置的权限。


    所有在保存更改过程中出现的错误信息都会保存在一个日志文件中,此文件与脚本文件具有相同的名称,而扩展名为 .log。还可以在“日志查看器”中查看表明表成功保存和未成功保存的消息。

    展开全文
  • 金蝶K3日常问题解决手册

    热门讨论 2009-11-26 15:40:50
    2.28 K3升级到10.3后在做应付单据时总是提示网络冲突,已经清除网络控制中的记录还是存在错误提示。 22 2.29 K310.3+sp1在windows2003+sp1环境下运行,客户端在报表模块下操作,按F9键,提示“函数错误”。 22 2.30 ...
  • 如何重装系统 方法1: 首先,确定你的光驱是第一启动顺序并支持从光驱启动。 要从光盘安装,要把BIOS进行设置,使系统能够从光盘启动。其方法如下: (1)启动计算机,当屏幕上显示 Press Del to Enter BIOS Setup...
  • 创建型-单例模式

    2021-02-20 17:08:23
    解决了什么问题(应用场景) 从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。 我们还可以使用单例解决资源访问冲突的问题。 如何实现 要实现一个单例,我们...

    目录

    定义

    解决了什么问题(应用场景)

    如何实现

    饿汉式

    懒汉式

    双重检测

    静态内部类

    枚举

    单例模式存在什么问题

    是否有其它替代方案

    参考资料


    定义

    一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。

     

    解决了什么问题(应用场景)

    • 从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。
    • 我们还可以使用单例解决资源访问冲突的问题。

     

    如何实现

    要实现一个单例,我们需要关注的点无外乎下面几个:

    • 构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;
    • 考虑对象创建时的线程安全问题;
    • 考虑是否支持延迟加载;
    • 考虑 getInstance() 性能是否高(是否加锁)。

     

    饿汉式

    在类加载的时候,instance 静态实例就已经创建并初始化好了。类加载是线程安全的 instance 自然也就是线程安全的。不过,这种实现方式不支持延迟加载。

    public class IdGenerator {

      private AtomicLong id = new AtomicLong(0);

      private static final IdGenerator instance = new IdGenerator();

      private IdGenerator() {}

      public static IdGenerator getInstance() {

        return instance;

      }

      public long getId() {

        return id.incrementAndGet();

      }

    }

    懒汉式

    支持延迟加载,不过并发度低

    public class IdGenerator {

      private AtomicLong id = new AtomicLong(0);

      private static IdGenerator instance;

      private IdGenerator() {}

      public static synchronized IdGenerator getInstance() {// 加了一把粒度很大的锁,导致并发度低

        if (instance == null) {

          instance = new IdGenerator();

        }

        return instance;

      }

      public long getId() {

        return id.incrementAndGet();

      }

    }

     

    双重检测

    支持延迟加载,并发度高

    public class IdGenerator {

      private AtomicLong id = new AtomicLong(0);

      private static IdGenerator instance;

      private IdGenerator() {}

      public static IdGenerator getInstance() {

        if (instance == null) {

          synchronized(IdGenerator.class) { // 此处为类级别的锁

            if (instance == null) {

              instance = new IdGenerator();

            }

          }

        }

        return instance;

      }

     

      public long getId() {

        return id.incrementAndGet();

      }

    }

    静态内部类

    实现简单,支持延迟加载

    public class IdGenerator {

      private AtomicLong id = new AtomicLong(0);

      private IdGenerator() {}

     

      private static class SingletonHolder{

        private static final IdGenerator instance = new IdGenerator();// 是线程安全的

      }

       

      public static IdGenerator getInstance() {

        return SingletonHolder.instance;

      }

      

      public long getId() {

        return id.incrementAndGet();

      }

    }

    枚举

    枚举个锤子

    最简单的实现方式,基于枚举类型的单例实现。这种实现方式通过 Java 枚举类型本身的特性,保证了实例创建的线程安全性和实例的唯一性。

    public enum IdGenerator {

      INSTANCE;

      private AtomicLong id = new AtomicLong(0);

      

      public long getId() {

        return id.incrementAndGet();

      }

    }

     

    单例模式存在什么问题

    42讲,没看懂

    是否有其它替代方案

    使用工厂模式,使用依赖注入

    参考资料

    极客时间--设计模式之美--第41讲,42讲,43讲

    展开全文
  • - 应用场景 处理资源访问冲突 对象级别的锁无法解决资源竞争,使用单例模式实现类级别的锁更加安全。 表示全局唯一类 从业务概念上,某些数据在系统中只应该保存一份,适合设计为单例类。 - 如何实现一个单例 ...

    - 单例模式(Singleton Pattern)

    一个类只允许创建一个对象。

    - 应用场景

    • 处理资源访问冲突

      对象级别的锁无法解决资源竞争,使用单例模式实现类级别的锁更加安全。

    • 表示全局唯一类

      从业务概念上,某些数据在系统中只应该保存一份,适合设计为单例类。

    - 如何实现一个单例

    • 构造函数需要是private访问权限的,这样才能避免外部创建实例
    • 考虑对象创建时的线程安全问题
    • 考虑是否支持延迟加载
    • 考虑getInstance()性能是否高(是否加锁)

    - C语言实现

    Class.h

    #ifndef __CLASS_H__
    #define __CLASS_H__
    
    typedef struct _Class
    {
        int data;
    } Class;
    
    extern Class *getInstance(void);
    extern void changeData(Class *_this, int data);
    extern void showData(Class *_this);
    
    #endif
    

    Class.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include "Class.h"
    
    #define METHOD_1
    #define METHOD_1 1 //饿汉式
    #define METHOD_2 2 //懒汉式
    
    static Class *newClass(void)
    {
        Class *instance = (Class *)malloc(sizeof(Class));
        assert(instance != NULL);
        return instance;
    }
    
    #if (METHOD == METHOD_1)
    /**
     * 饿汉式
     * 不支持延迟加载
     * 注意:initClass只能调用一次
     * */
    static Class *instance;
    void initClass(void)
    {
        //在类初始化时就创建好实例
        instance = newClass();
    }
    
    Class *getInstance(void)
    {
        return instance;
    }
    #endif
    
    #if (METHOD == METHOD_2)
    /**
     * 饿汉式
     * 支持延迟加载,但是为了多线程安全,性能有所降低
     * 注意:方法内部要加锁,防止多线程多次创建
     * */
    Class *getInstance(void)
    {
        static Class *instance = NULL;
    
        // 这里要对instance加锁
        if (instance == NULL)
        {
            instance = newClass();
        }
        //退出时解锁
        return instance;
    }
    #endif
    
    void changeData(Class *_this, int data)
    {
        _this->data = data;
    }
    
    void showData(Class *_this)
    {
        printf("Class Data : %d\n", _this->data);
    }
    

    main.c

    #include "Class.h"
    
    int main()
    {
        Class *obj_instance1 = getInstance();
        showData(obj_instance1);
        Class *obj_instance2 = getInstance();
        showData(obj_instance2);
    
        changeData(obj_instance1,1);
    
        showData(obj_instance1);
        showData(obj_instance2);
    
        changeData(obj_instance2,2);
    
        showData(obj_instance1);
        showData(obj_instance2);
    
        return 0;
    }
    

    run result

    » ./a.out  
    Class Data : 0
    Class Data : 0
    Class Data : 1
    Class Data : 1
    Class Data : 2
    Class Data : 2
    
    展开全文
  • asp.net知识库

    2015-06-18 08:45:45
    如何解决ACCESS中SELECT TOP语句竟然返回多条记录的问题? Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

如何解决应用权限冲突