sql-server - 在一个脚本中更改表添加列和检查约束 - 在约束上获取无效的列名
问题描述
我想将此脚本作为另一个更大脚本的一部分运行。
我不想添加 GO 语句,因为定义的变量不会超过 GO。
作为单独的语句它们起作用,但是当作为一个整体运行时,我得到错误:
消息 207,级别 16,状态 1,第 4 行无效的列名称“ECLIPSECapable”。
ALTER TABLE [dbo].[Providers]
ADD [ECLIPSECapable] [char](1) NULL;
ALTER TABLE [dbo].[Providers] WITH CHECK ADD CONSTRAINT [ICProvidersECLIPSECapable] CHECK (([ECLIPSECapable]='N' OR [ECLIPSECapable]='Y'))
ALTER TABLE [dbo].[Providers] CHECK CONSTRAINT [ICProvidersECLIPSECapable]
解决方案
使用动态 SQL 将脚本分成多个批次:
exec ('
ALTER TABLE [dbo].[Providers]
ADD [ECLIPSECapable] [char](1) NULL;
');
exec ('
ALTER TABLE [dbo].[Providers] WITH CHECK ADD CONSTRAINT [ICProvidersECLIPSECapable] CHECK (([ECLIPSECapable]=''N'' OR [ECLIPSECapable]=''Y''))
');
exec ('
ALTER TABLE [dbo].[Providers] CHECK CONSTRAINT [ICProvidersECLIPSECapable]
');
推荐阅读
- linux - 审核未捕获目录删除事件
- graphql - 端点小于六个字符时出现“未知资源”错误
- powershell - Tcp-NetConnection 失败并出现错误“无法将值转换为 System.String 类型”
- django - 达芙妮正确启动了吗?
- request - 预检请求不允许 POST 方法后,浏览器仍然发送 HTTP POST 请求
- django - Django:OneToOneField 的多个类选择
- javascript - 使用变量分解对象数组选择
- oauth-2.0 - Getting Bearer token in OAuth2.0 using Rest Assured
- windows - Win 10 Postgresql 11 数据库集群初始化失败
- architecture - Web 服务器上的多个应用程序考虑微服务或 SOA