SQL Server - 向所有表添加默认约束

2024-03-08

有没有办法编写一个脚本来检查数据库中的每个表,寻找uniqueidentifier列名为ID,然后添加一个DEFAULT的约束NEWID()到列,如果DEFAULT约束不存在?


根据OP的评论澄清进行编辑

该脚本创建一个DEFAULT的约束NEWID() on any uniqueidentifier列名为ID还没有DEFAULT约束。

SET NOCOUNT ON

DECLARE @tableVarId int
DECLARE @alterSql   nvarchar(MAX)

DECLARE @columnsNeedingDefault TABLE
(
  TableVarId    int IDENTITY (1,1) PRIMARY KEY,
  AlterSql      nvarchar(MAX)
)

INSERT INTO @columnsNeedingDefault (AlterSql)
SELECT
  'ALTER TABLE ' + QUOTENAME(a_Table.[name]) +
  ' ADD CONSTRAINT [DF_' + a_Table.[name] + '_' + a_Column.name +
  '] DEFAULT NEWID() FOR ' + QUOTENAME(a_Column.name)
FROM
  sys.columns AS a_Column
INNER JOIN
  sys.tables AS a_Table ON a_Column.[object_id] = a_Table.[object_id]
WHERE
  a_Column.[name] = 'ID'
  AND
  a_Column.user_type_id = 36 -- uniqueidentifier
  AND
  NOT EXISTS
  (
    SELECT
      *
    FROM
      sys.default_constraints AS a_DefaultConstraint
    WHERE   a_DefaultConstraint.parent_object_id = a_Table.[object_id]
      AND   a_DefaultConstraint.parent_column_id = a_Column.column_id
      AND   a_DefaultConstraint.type_desc = 'DEFAULT_CONSTRAINT'
  )

SET @tableVarId = (SELECT MIN(TableVarId) FROM @columnsNeedingDefault)
WHILE @tableVarId IS NOT NULL
  BEGIN
    SELECT @alterSql = AlterSql FROM @columnsNeedingDefault

    PRINT @alterSql
    EXEC sp_executesql @alterSql

    SET @tableVarId = (SELECT MIN(TableVarId) FROM @columnsNeedingDefault
                       WHERE TableVarId > @tableVarId)
  END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server - 向所有表添加默认约束 的相关文章

  • C#的数组列表可以用来填充SSIS对象变量吗?

    我已在 C 脚本中填充了一个列表 并将其值分配给 SSIS 对象变量 然后 我使用该对象变量通过循环遍历 For every do 枚举器来执行一些 SQL 查询 我尝试通过 Foreach ado 枚举器执行此操作 但出现错误 X 变量不
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • Visual Studio 2010 中的数据库设计器

    我需要创建一个全新的 Sql Server 2008 数据库 并希望使用 Visual Studio 2010 Ultimate 中的数据库项目 我已经创建了该项目并在下面添加了一个表格dbo架构 桌子 sql仅以纯文本形式显示 但带有颜色
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 在 C# 中读取大型 SQL 脚本文件

    我正在尝试阅读一个大脚本 到目前为止我已经尝试了两种选择 选项1 由于内存空间不足的问题 我们无法在SQL Management Studio中打开大型脚本文件 所以最初我使用sqlcmd在远程主机上执行 160 mb SQL 脚本文件 5
  • “作为自身执行”与跨数据库视图

    SQL Server 2016 数据库中有一个视图A从另一个数据库中的表中进行选择 B use A go create view TheView as select from B dbo SomeTable 我有 dbo 访问权限B数据库
  • 删除 IF ELSE 语句中的临时表

    我在这里面临僵局 问题是我必须更改使用 3 个不同临时表的过程 为了便于对话 让我们将它们命名为 temptable1 temptable2 temptable3 我无法在这里复制 粘贴整个过程 但总体思路是这样的 原始过程 procedu
  • SQL:如何在按部分分组的查询中使用子查询?

    如何在按部分分组的查询中使用子查询 我使用 SQL Server 2008 R2 和 Delphi 2010 我收到此错误 Cannot perform an aggregate function on an expression cont
  • 无法删除 Access 中 SQL 表上的注册表

    我有一个在 Access 应用程序中链接的 SQL Server 表 如果我尝试使用删除查询删除记录 则没有问题 但是 如果我尝试直接在表中删除记录或在数据表模式下使用选择查询 Access 不允许我删除记录并引发以下警告 Microsof
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 使用 Dapper 插入时出现 NullReferenceException

    当我运行以下代码时 我收到一个 NullReferenceException 异常 指出对象引用未设置到该对象的实例 我已经使用不太复杂但格式相同的对象成功插入了 dapper 所以我不确定我做错了什么 public void Foo IE
  • 删除数据库中的行后如何重新排序ID

    我正在使用 C 来制作具有 sql 数据库的程序 在数据库中我有一个名为Workers 它有一个自动增量和主键ID column 当我删除一条记录时 ID 之间会出现间隙 删除记录后如何重新排序 ID UPDATE 我要做的就是找到记录后将
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • SQL Server 数据库架构版本控制和更新

    对于我的应用程序 我必须支持更新方案 并且数据库可能会受到影响 我希望能够从旧版本更新到最新版本 而无需安装中间版本 例如 假设我有版本 A 最旧的版本 B 中间版本 和 C 新版本 我希望能够将版本 A 直接更新到版本 C 对于应用程序文
  • 从 Sharepoint 到 SQL Server 的实时同步

    我见过许多将 SQL Server 数据同步到 SharePoint 的解决方案 但没有见过将 SharePoint 列表同步到 SQL Server 的解决方案 有谁知道解决方案吗 商业化就好了 或者 我需要编写一个 Web 部件来创建多
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作

随机推荐

  • 如何在 RxJava 中延迟地从列表中发出项目?

    我正在使用 Retrofit 从 REST API 获取书签 public interface BookmarkService GET bookmarks Observable
  • UiWebView 委托方法未被调用

    我正在尝试在 webView 中播放 youtube 嵌入视频 当我未设置委托时它会播放 并且如果我设置委托视频不会加载 并且委托方法也不会被调用 这是我的代码 m class import EmbeddedVideoVC h interf
  • 数组之间的交集索引

    是否有一种快速方法可以将数组的每个元素与唯一标识符列表中的每个元素进行比较 使用 for 循环来遍历每个唯一值是可行的 但速度太慢而无法使用 我一直在寻找矢量化解决方案 但没有成功 任何帮助将不胜感激 arrStart startRavel
  • http 错误 403.14-禁止

    我成功地将我的测试 html 页面托管在iis8 当我尝试托管已经创建的网站时 我得到了http错误 403 14 禁止 即使我将默认文档设置为具有框架的起始 html 页面 该网站有几个文件夹内部文件夹 当我启用目录浏览时 它将列出该页面
  • Process.start() 启动的进程返回错误的进程 ID?

    我正在使用以下代码启动可执行文件 Process proc new Process proc StartInfo FileName executablePath proc Start proc WaitForInputIdle 在这次通话之
  • 使用 Process、RegistryKey 将 .NET Framework 代码移植到 .NET Standard

    我有一个来自现有 NET Framework 项目的方法 该方法从注册表获取 Windows 中默认浏览器的路径 并使用Process call string browser RegistryKey regKey null try regK
  • 请参阅调试目的的 Firebase 网络流量

    我希望能够使用 Charles Proxy 调试 firebase 分析 我无权访问源代码 因此无法在 Firebase 中启用调试视图 我想要跟踪网络流量 以便能够使用 Firebase Analytics 数据的 Charles 代理查
  • 从 LINQ to SQL 生成的 T-SQL 缺少 where 子句

    我有一个名为 CodeLookupAccessDataContext 的 DataContext 对象 它是通过 Visual Studio LINQ to SQL 类向导生成的 我扩展了该对象的功能 使其公开一些方法来返回 LINQ to
  • 如何将 javascript 代码注入到每个原型方法的开头?

    我想在 javascript 中注入代码 用于调试目的 在每个人我的 JavaScript 方法原型 这个例子只显示了一个类 但是假设我有数百个类 每个类有几十个方法 该机制应该在原型级别执行 而不需要指定每个类 方法名称 function
  • 何时“让它崩溃”以及何时捍卫 Erlang 中的代码?

    因此 带着 让它崩溃 的口号 Erlang 代码意味着能够抵御残酷的世界事件 例如意外拔出插头 硬件故障和不稳定的网络连接 另一方面 有防御性编程 https en wikipedia org wiki Defensive programm
  • Coq QArith 除以零就是零,为什么?

    我注意到在 Coq 的有理数定义中 零的倒数被定义为零 通常 除以零是没有明确定义 合法 允许的 Require Import QArith Lemma inv zero is zero 0 0 Proof unfold Qeq refle
  • 启动时不继承父文件描述符

    我需要使用 start 命令在 winXP 上启动一些进程 听起来很简单 但是有没有办法让启动的进程不会继承父进程的任何端口 我在我的程序中使用以下方法启动孩子 system start x params 现在 当父进程被杀死时 我无法再次
  • 二叉搜索树的广度优先遍历 C++

    也许是快速 简单的问题 我已经实现了一个二叉树 然后我希望将二叉搜索树转换为数组 或者至少像在数组中一样打印出来 我遇到的问题是如何获取 0 中的 NULL 标志 例如 假设我有一棵树 如下所示 10 6 12 1 8 15 4 我希望它按
  • 如何在 Cakephp 中发出 https post 请求

    我有一个要求 应用程序必须通过 HTTPS POST 进行 REST API 调用 我是 cakephp 的新手 我在想是否可以使用 httpsocket 进行 https 调用 我很感激任何帮助 Thanks 您可以使用其中任何一个 CA
  • MacPorts gcc48 无法识别命令行选项“-stdlib=libc++”

    Context 我正在尝试编译包 root numpy 它是科学分析软件 root 和python包 numpy 之间的链接 它用作根包装器 rootpy 的一部分 执行以下行时出现 g 错误 g bundle undefined dyna
  • EF AddOrUpdate 种子不更新子实体

    我在播种数据时遇到一些问题 我能够使用一个非常小的应用程序重现该问题 鉴于您有这种种子方法 protected override void Seed JunkContext context context Junks AddOrUpdate
  • GCM 响应中的multicast_id 是什么?

    示例场景 我正在使用 GCM 向多个设备发送消息 响应包含 multicast id 我该如何使用这个值 Thanks 它只是一个标识符 多播ID标识多播消息的唯一 ID 编号 该 ID 没有用处 除非您希望将其作为 Google 的 收据
  • npm运行服务报错

    我在运行命令时遇到问题 npm 运行服务 要修复它 我需要注销或重新启动我的 Ubuntu 16 04 我检查了正在运行的任务 节点没有运行 我还卸载了node和npm并再次使用NVM安装 但我仍然有问题 NPM错误日志 gt email
  • SSIS 包中的步骤如何检查时间?

    我的控制流中的起始项目需要是检查时间并设置变量的项目 控制流项中是否有一个项可以做到这一点 访问您的系统变量 System StartTime 将是包开始执行的时间 如果开始执行和需要评估当前时间的元素之间有很长的时间 您可以查看 Cont
  • SQL Server - 向所有表添加默认约束

    有没有办法编写一个脚本来检查数据库中的每个表 寻找uniqueidentifier列名为ID 然后添加一个DEFAULT的约束NEWID 到列 如果DEFAULT约束不存在 根据OP的评论澄清进行编辑 该脚本创建一个DEFAULT的约束NE