【问题标题】:SQL Server - Generate script without primary keySQL Server - 生成没有主键的脚本
【发布时间】:2013-05-09 03:44:25
【问题描述】:

我正在尝试为我的数据生成一个脚本(我的意思是,所有的 INSERT INTO 命令)。 由于访问权限,我无法执行 SET IDENTITY_INSERT TABLE OFF 和 ON(我在 Staging 中使用用户应用程序)

那么,有没有办法在 SQL Server 管理器中制作这个脚本,避免带有主键的字段呢? 我将所有属性(主要、唯一等)设置为 false,但脚本仍在发送此字段(例如,RecID 1、2、3 等)。

我使用的是 SQL Server 2012。

我的脚本配置:

我得到的结果:

SET IDENTITY_INSERT -TABLE- ON 
INSERT INTO TABLE (ID,Field1) VALUES (1,'value')

任何解决方案(除了使用 Notepad++ 删除)都值得赞赏。

【问题讨论】:

    标签: sql sql-server migration


    【解决方案1】:

    当您有很多不同数据类型的列时,还有另一种方法可以更自动化且不那么繁琐;给定一个表 T:

    (
      ID int identity,
      C1 nvarchar(255),
      C2 datetime
      ...
    )
    

    ...选择除标识列之外的所有内容到新表中:

    select C1, C2, ... into InterimTable from T
    

    然后:

    1. InterimTable 上运行生成脚本向导。
    2. 使用任何工具在 SQL 中搜索InterimTable 并替换为T
    3. 运行

    【讨论】:

      【解决方案2】:

      有点变通,但有时有用的快速而肮脏的方式来做这些事情:

      SELECT 'INSERT INTO TABLE (Field1) VALUES (''' + Field1 + ''')' FROM TABLE
      

      结果集将是表 TABLE 中每一行的每个插入语句的一行。 INSERT 语句是通过连接 INSERT 语句文本与 Field1 中的值生成的。

      【讨论】:

      • 天啊,这太容易了,我从来没想过!我正在考虑用获取光标等制作一些 SP。哈哈。非常感谢。
      • 当您需要转换数据并且没有方便的正则表达式时,它在许多情况下都派上用场......多年来它为我节省了好几次!
      • 那么空值呢?我有一些空记录(smalldatetime 字段)
      • @LeandroBardelli 我在几年前错过了,但是看看 COALESCE 函数将你的 NULL 映射到字符串“NULL”。
      猜你喜欢
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2014-02-18
      • 2020-04-09
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多