Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 创建时脚本表包括最近添加的列作为修改?_Sql Server 2005_Ssms_Sql Server 2008 - Fatal编程技术网

Sql server 2005 创建时脚本表包括最近添加的列作为修改?

Sql server 2005 创建时脚本表包括最近添加的列作为修改?,sql-server-2005,ssms,sql-server-2008,Sql Server 2005,Ssms,Sql Server 2008,我正在针对SQLServer2005后端运行SQLServerManagementStudio 2008。SSMS表现出一种我从未见过的行为。我不知道这是SSMS 2008中的新功能还是其他功能 基本上,我在现有表中添加了一些新列。添加这些列之后,我在IDE中的表上执行了“scripttable as…CREATE”。我希望只得到一个CREATETABLE语句,其中包含所有行,包括前一行和新行。但是,生成的代码是表的原始定义的CREATE语句,加上每个新列的个别ALTERTABLE T ADD[

我正在针对SQLServer2005后端运行SQLServerManagementStudio 2008。SSMS表现出一种我从未见过的行为。我不知道这是SSMS 2008中的新功能还是其他功能

基本上,我在现有表中添加了一些新列。添加这些列之后,我在IDE中的表上执行了“scripttable as…CREATE”。我希望只得到一个CREATETABLE语句,其中包含所有行,包括前一行和新行。但是,生成的代码是表的原始定义的CREATE语句,加上每个新列的个别
ALTERTABLE T ADD[Column]…
语句

这不是一个问题(从最近的变更管理的角度来看,实际上可能很有用……等等),但这是我以前从未见过的行为

我认为这可能与行长度有关,但在表页被拆分之前,行长度已低于8000字节的限制(请原谅我的术语……我是开发人员,而不是DBA)。诚然,它不是一个小表(现在有127列加了加法,行长略超过7000字节)

我看到了什么?这是SSMS或SQL Server本身的特性/功能吗?这是大表定义的副作用吗

以下示例没有重复该行为,但它说明了(简化)我看到的内容:

CREATE TABLE dbo.Table_1
(
ID int NOT NULL,
title nvarchar(50) NOT NULL
)
那么

我希望生成以下内容:

CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[title] [nvarchar](50) NOT NULL,
[description] [varchar](50) NULL,
[numthing] [nchar](10) NULL,
CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[title] [nvarchar](50) NOT NULL)
ALTER TABLE [dbo].[Table_1] ADD [description] [varchar](50) NULL
ALTER TABLE [dbo].[Table_1] ADD [numthing] [nchar](10) NULL
然而,这是由于:

CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[title] [nvarchar](50) NOT NULL,
[description] [varchar](50) NULL,
[numthing] [nchar](10) NULL,
CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[title] [nvarchar](50) NOT NULL)
ALTER TABLE [dbo].[Table_1] ADD [description] [varchar](50) NULL
ALTER TABLE [dbo].[Table_1] ADD [numthing] [nchar](10) NULL

我相信您会看到Microsoft正在使用SQL生成代码的两部分

我猜您在单击生成创建脚本时没有保存更改;因此生成代码没有最新版本的表来生成它。相反,它在旧表上运行正常的生成代码,然后在“scriptchanges”选项后面运行代码以使其更新

聪明的代码重用具有特殊的结果。

我怀疑您在文章中“清理”了SQL,因为它通常会包含许多其他SET和GO语句。我假设您删除了“SET ANSI_PADDING”语句

表中的某些列可能已设置为“开”,而其他列则为“关”。ANSI_PADDING选项会影响设置后创建的所有列,因为这些列将按表格顺序创建,因此根据表格的不同,需要多次使用ANSI_PADDING选项。真正的问题是MS SQL Server无法在CREATE TABLE语句中设置ANSI_PADDING选项。因此,它需要在初始创建之后通过在适当的SET ANSIU PADDING语句之后使用ALTER TABLE语句来完成一些工作


请参阅:

谢谢,但是没有。我没有在上面提到确实已经保存了该表。我现在刚试过,它仍然表现出同样的行为。12天之后,多个SSM关闭和打开,我肯定还没有打开表并准备好保存:)@Chris Simmons:在这种情况下,脚本显然是某种形式的小精灵或流氓精灵事实上,我没有包含完整的自动生成脚本。三年后的今天,由于不再安装SSMS 2008,我无法验证这是否是问题所在。不过,您引用的文章似乎最合适。然而,我不记得如本文所示,将ANSI_填充设置为开/关“切换”。我想我当时应该已经知道了。不管怎样,我认为你的答案很可能是正确的。