新表意外地没有调整大小以包含由 UPDATE / SET / FROM 发送的行数



免责声明 - 这里非常新手的SQL程序员;没有正式的背景。 我认为我缺少一些非常基本的东西 - 需要帮助弄清楚为什么我创建的表不会自动调整大小(行长度(以适合我尝试使用 UPDATE 命令发送的所有数据。

背景 - 我在 SSMS 中创建了一个新数据库"帮助程序表"(所有设置都是默认设置(。 然后,我使用向导创建了一个新表。 该表的脚本如下所示:

SET ANSI_NULLS ON 
GO
SET QUOTED_IDENTIFIER ON 
GO
CREATE TABLE [dbo].[CollectionStatus_RecipientGroup]
(
[RecipientGroup] [VARCHAR](255) NULL,
[CollectionStatus] [VARCHAR](255) NOT NULL,
CONSTRAINT [PK_CollectionStatus_RecipientGroup] 
PRIMARY KEY CLUSTERED ([CollectionStatus] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY]
GO

我现在正在尝试运行UPDATE / SET / FROM查询以使用选择更新此表。

代码如下:

UPDATE [HelperTables].[dbo].[CollectionStatus_RecipientGroup]
SET [RecipientGroup] = tableupdate.RecipientGroup,
[CollectionStatus] = tableupdate.CollectionStatus
FROM
(SELECT *
FROM
(SELECT /* query trimmed for brevity - I confirmed it works perfectly by itself*/
) results
) tableupdate

在以前的SQL Server上,这非常有效。但是,它导致(受影响的 0 行(返回命令(没有错误(,直到我进入编辑前 XXX 行向导并添加一些虚拟数据。 当我重新运行查询时,结果是(受影响的 4 行(,其中 4 是我添加的虚拟数据行数。 查询发送的数据确实表示结果集的前四行。

因此,我的结论是我的代码很好,但表的设置或 SSMS 中的某些固有设置(也许是权限?

我错过了什么?

感谢您的所有反馈,即使是尖刻的一点。确认 INSERT INTO 解决了这个问题 - 我还向同一查询添加了 DROP TABLE 和 CREATE TABLE 子句(显然在前面(。可能不是最有效的方法,但似乎工作正常。如果有比我想学习的更好的方法!

最新更新