GVKun编程网logo

如何将列添加到大型SQL Server表(sql添加列数据从其它表中)

10

针对如何将列添加到大型SQLServer表和sql添加列数据从其它表中这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.net–如何将现有SQLServer存储过程添加到源代码管理?、c#–

针对如何将列添加到大型SQL Server表sql添加列数据从其它表中这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.net – 如何将现有SQL Server存储过程添加到源代码管理?、c# – 以编程方式将列添加到SQL Server数据库、SQL Server表中添加新列并添加描述、sql – 将新列添加到大数据库表等相关知识,希望可以帮助到你。

本文目录一览:

如何将列添加到大型SQL Server表(sql添加列数据从其它表中)

如何将列添加到大型SQL Server表(sql添加列数据从其它表中)

我在生产中有一个SQL Server表,它具有数百万行,事实证明我需要向其中添加一列。或者,更准确地说,我需要向表所代表的实体添加一个字段。

从句法上讲,这不是问题,如果表没有太多行并且不在生产中,这将很容易。

确实,我所追求的是采取行动。有很多网站,它们的表非常大,而且它们必须不时添加字段。他们如何在没有大量停机的情况下做到这一点?

我应该添加的一件事是,我不希望该列允许空值,这意味着我需要具有默认值。

因此,我要么需要找出如何及时添加具有默认值的列,要么需要找到一种以后可以更新该列,然后将该列设置为不允许为空的方法。

答案1

小编典典
ALTER TABLE table1 ADD  newcolumn int NULLGO

不应花费那么长的时间…需要很长时间的是在其他列的中间插入列… b / c然后引擎需要创建一个新表并将数据复制到新表中。

.net – 如何将现有SQL Server存储过程添加到源代码管理?

.net – 如何将现有SQL Server存储过程添加到源代码管理?

现在我们有一堆数据库服务器,其中运行的存储过程记录很少,并且不存在.

当对一个进行更改时,没有日志,并且很难弄清楚为什么突然失效的东西.

我们最近使用SVN切换到使用正确的版本控制,所以我希望将这些存储过程添加到版本控制中.

我们是.Net商店,我知道存在一个数据库项目类型.这会是一个好方法吗?

或者,我可以将存储过程保存为文本文件并对其进行操作,但我想知道这样做所涉及的令人讨厌的部署步骤.

解决方法

在Visual Studio中,我创建了一个空项目并向其添加了脚本.它是我服务器架构解决方案的一部分现在每个脚本都在源代码控制之下.我还添加了一个文件夹结构,以尝试保持理智.当应用程序完成时,我们可能在多个服务器模式下的源代码管理下接近3000个脚本.不是说这是最好的,但它适用于我们的项目.该解决方案还有一个实用程序,它使用SMO实际运行/部署所有脚本,因此所有内容都包含在一个解决方案中.屏幕截图显示了一些结构供您参考……

c# – 以编程方式将列添加到SQL Server数据库

c# – 以编程方式将列添加到SQL Server数据库

我接管了一个需要重写的ASP.NET应用程序.我需要复制的此应用程序的核心功能修改了从第三方软件通过ODBC访问的sql Server数据库.

第三方应用程序创建表示由用户生成的打印机标签的文件.这些标签文件直接引用ODBC源的字段.表格的每一行代表一个填充标签字段的产品. (因此,在这些文件中直接引用表的列名.)

ASP.NET应用程序允许用户通过添加或编辑表示产品的特定行来创建/更新标签引用的这些字段的数据.

它还允许偶尔添加新字段……它实际上在核心表中创建了一个由标签引用的新列.

我担心的是:我以前从未以编程方式更改现有表的列.现有的应用程序似乎处理这个功能很好,但在我在新的应用程序中盲目地做同样的事情之前,我想知道这样做有什么样的陷阱,如果有的话…并且如果有任何明显的选择.

解决方法

它在很大程度上取决于您要对这些表运行的查询. KVP的主要缺点是更复杂的查询可能变得非常低效.

两者的“混合”方法可能很有趣.

将要查询的值存储在专用列中,将其余值保留在XML blob中(MS sql具有很好的功能,甚至可以在XML中查询)或者在KVP包中.就个人而言,我真的不喜欢DB中的KVP,因为你不能再构建特定于应用程序逻辑的indix.

另一种方法是根本不对特定列进行建模.您可以创建通用的“自定义属性”表,例如:Attribute1,Attribute2,Attribute3,Attribute4(用于所需的数据类型等等)然后,您可以将元数据添加到数据库中,以描述AttrX对特定类型的打印机标签的含义.

同样,它实际上取决于您最终如何使用该数据.

SQL Server表中添加新列并添加描述

SQL Server表中添加新列并添加描述

注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008).

工作需要,需要向sql Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先附上存储过程然后解释)

rush:sql;"> /********调用方法********** 作用: 添加列并添加列描述信息 调用: exec [SetColumnInfo] '表名','列名',N'列说明,描述','列类型{默认:NVARCHAR(50)}','列默认值{默认:NULL}' ******************/ CREATEPROCEDURE [dbo].[SetColumnInfo] @tableName NVARCHAR(100) --表名,@columnName NVARCHAR(100) --列名,@columnInfo NVARCHAR(2000) --列说明,描述,@columnType NVARCHAR(100)='NVARCHAR(50)' --列类型 例如: NVARCHAR(50),@columnDefault NVARCHAR(100)='NULL' --列默认值 例如: NULL as begin IFNOTEXISTS ( SELECT * FROM syscolumns WHERE id = object_id(@tableName) AND NAME = @columnName ) BEGIN print 'exec:'+('ALTER TABLE ' + @tableName + ' ADD ' + @columnName + '' + @columnType + '' + @columnDefault) print 'Add['+@columnName+']column' EXEC ('ALTER TABLE ' + @tableName + ' ADD ' + @columnName + '' + @columnType + '' + @columnDefault) END IFEXISTS ( SELECT * FROM::fn_listextendedproperty('MS_Description','SCHEMA' --用户或用户定义类型,N'dbo' --指定的 0 级对象类型的名称,N'TABLE' --1 级对象的类型,@tableName --指定的 1 级对象类型的名称,N'COLUMN' --2 级对象的类型,@columnName --指定的 2 级对象类型的名称 ) ) BEGIN print 'Edit['+@columnName+']Description' EXEC sys.sp_updateextendedproperty @name = N'MS_Description' --要添加的属性名称,@value = @columnInfo --将要与属性相关联的值,@level0type = N'SCHEMA' --用户或用户定义类型,@level0name = N'dbo' --指定的 0 级对象类型的名称,@level1type = N'TABLE' --1 级对象的类型,@level1name = @tableName --指定的 1 级对象类型的名称,@level2type = N'COLUMN' --2 级对象的类型,@level2name = @columnName --指定的 2 级对象类型的名称 END ELSE BEGIN print 'Add['+@columnName+']Description' EXEC sys.sp_addextendedproperty @name = N'MS_Description' --要添加的属性名称,@level2name = @columnName --指定的 2 级对象类型的名称 END end GO

解释:

语句:

rush:sql;"> SELECT * FROM syscolumns WHERE id = object_id(@tableName) AND NAME = @columnName

作用: 查找表中是否存在指定的列. 如果存在则添加会报错.

ALTER TABLE 语句:

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

如需在表中添加列,请使用下列语法:

rush:sql;"> ALTERTABLE table_name ADD column_name datatype

要删除表中的列,请使用下列语法:

rush:sql;"> ALTERTABLE table_name DROPCOLUMN column_name

要改变表中列的数据类型,请使用下列语法:

rush:sql;"> ALTERTABLE table_name ALTERCOLUMN column_name datatype

属性的增删改:

fn_listextendedproperty: 获取扩展属性,主要判断下属性是否存在如果存在则更新,不存在则添加

sp_updateextendedproperty: 更新字段描述

sp_addextendedproperty : 添加字段描述

sp_dropextendedproperty: 删除字段描述

因为sp_dropextendedproperty上文存储过程没有出现特附上示例:

rush:sql;"> EXECsp_dropextendedproperty 'MS_Description','user',dbo,'table','表','column',a1

以上所述是小编给大家介绍的sql Server表中添加新列并添加描述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小编网站的支持!

sql – 将新列添加到大数据库表

sql – 将新列添加到大数据库表

我需要在数据库中的表中添加一个新的列.该表包含大约1.4亿行,我不知道如何在没有锁定数据库的情况下继续.

数据库正在生产中,这就是为什么这个数据库必须保持一致的流畅性.

我已经阅读了很多,但是如果这是一个危险的操作,从来没有真正得到答案.
新列为空,默认值为NULL.据了解,如果新列需要默认值,则会有更大的问题.

我真的很欣赏这个问题的一些直截了当的答案.这是否可行?

解决方法

是的,这是非常可行的.

添加一个列,其中NULL是可接受的并且没有默认值,不需要长时间运行的锁来将数据添加到表中.

如果您提供默认值,则sql Server必须去更新每个记录才能将该列新值写入该行.

一般工作原理:

+---------------------+------------------------+-----------------------+
| Column is Nullable? | Default Value Supplied | Result                |
+---------------------+------------------------+-----------------------+
| Yes                 | No                     | Quick Add (caveat)    |
| Yes                 | Yes                    | Long running lock     |
| No                  | No                     | Error                 |
| No                  | Yes                    | Long running lock     |
+---------------------+------------------------+-----------------------+

警告位:

我不记得在我的头顶部,当您添加一列导致使空值位图的大小被扩展时会发生什么.我想说,NULL位图表示当前行中所有列的可空性,但我不能把我的手放在我的心上,并且说这绝对是真的.

编辑 – > @MartinSmith指出,NULL位图只会在行发生变化时展开,非常感谢.但是,正如他还指出,如果行的大小扩展到sql Server 2012的8060字节限制,那么a long running lock may still be required.非常感谢* 2.

第二个警告:

测试它

第三和最后的警告:

不,真的,测试.

今天关于如何将列添加到大型SQL Server表sql添加列数据从其它表中的讲解已经结束,谢谢您的阅读,如果想了解更多关于.net – 如何将现有SQL Server存储过程添加到源代码管理?、c# – 以编程方式将列添加到SQL Server数据库、SQL Server表中添加新列并添加描述、sql – 将新列添加到大数据库表的相关知识,请在本站搜索。

本文标签: