sql-server - MS SQL Server - 创建辅助子集表时如何复制列约束
问题描述
我正在编写一个 Python 应用程序,它需要将记录插入到从大型主主表创建的小型辅助/临时工作子集表中(并在完成时删除)。
使用 PostgreSQL、MySQL 和 SQLite 作为后端可以正常工作。如果我理解正确,这是因为我创建这些工作表的方式是使用以下方法复制每列的约束/属性(尤其是默认值):
lcSQLString = f"create table {gcSubsetName} as select * from {gcTableName} where {lcWhere}"
CsrSubset.execute(lcSQLString)
(对于 PostgreSQL 和 SQLite,我使用“创建临时表...”)
但是,MS SQL Server 不支持该结构。我读过的所有文档/讨论都说,在 SQL Server(使用 TSQL)中创建辅助表的唯一方法是“select into”命令,如下所示:
lcSQLString = f"select * into {gcSubsetName} from {gcTableName} where {lcWhere}"
CsrSubset.execute(lcSQLString)
SQL Server 可以创建表和子集数据,但没有列约束。UPDATE 操作工作正常。但是大多数 INSERT INTO 命令会崩溃,因为它们没有在其列和值列表中包含所有字段。
不用担心,我们应该能够为工作子集表中的每个字段系统地使用“ALTER TABLE ... ALTER COLUMN ... SET DEFAULT ...”(或AllowNulls)来解决这个问题。
但是有没有更好的方法使用 TSQL 来做到这一点 - 在创建临时子集表时从主表复制约束?
解决方案
推荐阅读
- java - 如何更改警报对话框的图标?
- php - preg_replace 一个不在引号内的字符串
- java - 将 BigDecimal 转换为双精度值
- python - 需要帮助理解这行代码
- python - 需要帮助弄清楚为什么 G 没有在我的代码中定义?
- amazon-web-services - DynamoDB 读写能力说明
- javascript - 如何获得与一个数组相同的日期
- php - 如何使用 PHP 将 SQL Select 语句链接到 HTML 按钮
- java - 缺少 Spring LDAP 对象目录映射器注释的属性
- php - 主键中的 Doctrine 多租户缺失值(带 2 个 PK)