可以在SQL Server 2000中的视图中更改列长度吗?

时间:2012-01-05 15:40:53

标签: sql-server tsql sql-server-2000

不确定是否允许这样做,但如果是这样,有人可以告诉我T-SQL是什么吗?我尝试过以下但无济于事。

alter [View_Name]
alter column [Coln_Name] [New size/length] not null
GO

感谢任何帮助。谢谢!

6 个答案:

答案 0 :(得分:5)

不直接。

这是从列表达式自动派生的。您可以CAST查看SELECT列表中的表达式到特定数据类型。

答案 1 :(得分:3)

您需要更改基础表中的列长度,或者将构成视图的SELECT语句更改为CAST或将列转换为不同长度的数据类型。

答案 2 :(得分:1)

视图是查看其他表中数据的方法;通常,数据只是基础表中的任何内容,因此您需要更改那里的列。

但是,您可以拥有执行诸如cast()或convert()之类的视图;这些通常是一个坏主意,因为每次使用视图时都需要重新获取数据,并且这些操作会增加开销。在视图的设计中,您可以决定转换为另一种数据类型,或者进行任何您想要的转换 - 但它有开销,并且不会改变原始数据。

如果您知道当前视图选择的内容,则可以使用以下内容:

Alter view Viewname[cloumn] as Select cast(original_data as varchar(n)) from Original_Table

答案 3 :(得分:1)

您无法更改视图中的列大小,因为视图是从其他表派生的。因此,如果需要更改列大小,请更改表的列大小。要更改列大小,请使用ALTER TABLE as:

ALTER TABLE [Table_Name]

ALTER COLUMN [Column_Name] Data_Type(Size)

更改列大小后,您可能需要删除视图并重新创建它。

答案 4 :(得分:0)

我刚遇到同样的情况。我做的是:

  1. 更改视图所在表格中的列大小。

  2. 创建一个脚本来重新创建视图(如果您还没有)。

  3. 删除视图

  4. 使用脚本重新创建视图。

  5. 之后,视图中的列大小与我对基础表所做的更改相同。

答案 5 :(得分:0)

如果视图中显示的长度与基础表不匹配,则删除并重新创建视图。

使用类似的方法调查表和视图中的列长

SELECT o.[name], *
FROM sys.all_columns c
INNER JOIN sys.objects o on o.[object_id]=c.[object_id]
WHERE c.[name] = 'OML'
-- AND c.[max_length]=11
ORDER BY O.[name];

要获取Drop和Create sql,我使用SSMS并右键单击上下文菜单(在“对象资源管理器”中的视图上),然后转到“脚本视图为”和“拖放并创建到”。