首页 > 解决方案 > 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 来做到这一点 - 在创建临时子集表时从主表复制约束?

标签: sql-server

解决方案


推荐阅读