Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 Management Studio-如何在不删除表的情况下更改字段类型_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

SQL Server Management Studio-如何在不删除表的情况下更改字段类型

SQL Server Management Studio-如何在不删除表的情况下更改字段类型,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,在SQL Server Management Studio中,将设计视图中的现有字段从DECIMAL(16,14)更改为DECIMAL(18,14)时,如果不删除整个表及其所有数据,将不允许保存 一旦数据库中填充了记录,是否可以更改字段类型 只需使用T-SQL脚本而不是可视化设计器即可实现您的目标: ALTER TABLE dbo.YourTableNameHere ALTER COLUMN YourColumnNameHere DECIMAL(18, 14) 你应该没事的 可视化设计器采用

在SQL Server Management Studio中,将设计视图中的现有字段从
DECIMAL(16,14)
更改为
DECIMAL(18,14)
时,如果不删除整个表及其所有数据,将不允许保存


一旦数据库中填充了记录,是否可以更改字段类型

只需使用T-SQL脚本而不是可视化设计器即可实现您的目标:

ALTER TABLE dbo.YourTableNameHere
ALTER COLUMN YourColumnNameHere DECIMAL(18, 14) 
你应该没事的

可视化设计器采用了一种特别小心的方法,即使用新结构创建表,然后复制所有数据——这很有效,但很繁琐。通常,只要不截断列(使其变短),就可以使用t-SQL语句“就地”更改列的数据类型

另外:默认情况下,SSMS设计器非常小心,不允许进行任何需要删除和重新创建表循环的更改。您可以在
Tools>Options
中禁用此额外的小心,然后在此对话框中:


如果取消选中该选项,您将能够在可视化设计器中进行“破坏性”更改

即使在SSMS中取消选中该选项,设计器仍将删除该表。下一次这样做时,它不会提示您。为了证明这一点,启动SQL事件探查器并使用SSMS设计器更改列,您将看到在执行alter table命令之前发出的drop table命令。

什么是
大十进制
?使用设计器时会出现什么错误?@Martin Smith错误示例抱歉。@Spark-啊,好的。不确定这是自定义CLR UDT还是什么。+1@Spark:编辑您的问题以将
大十进制
更改为
十进制
。上面的表格选项会删除我的表格吗?我不想丢失其中的任何数据,只要更改字段类型即可。@Matrin是的,只是一个坏例子,它是十进制的,仅此而已。在HQL中,我使用了大小数“防止保存需要重新创建表的更改”选项,这是否也会删除我的表及其数据?我不想丢失任何数据。@Spark:取消选中此选项可使SSMS执行需要它的操作,以使用新结构重新创建表,复制所有数据,然后删除旧表,并将临时表重命名为表名。在此过程中,您不会丢失任何数据@用T-SQL代码
ALTER TABLE dbo.YourTableNameHere ALTER COLUMN YourColumnNameHere DECIMAL(18,14)NOT NULL
——当然,只有在发出此命令时列中没有任何
NULL
时,这才有效!