不确定是否允许这样做,但如果是这样,有人可以告诉我T-SQL是什么吗?我尝试过以下但无济于事。
alter [View_Name]
alter column [Coln_Name] [New size/length] not null
GO
感谢任何帮助。谢谢!
答案 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)
我刚遇到同样的情况。我做的是:
更改视图所在表格中的列大小。
创建一个脚本来重新创建视图(如果您还没有)。
删除视图
使用脚本重新创建视图。
之后,视图中的列大小与我对基础表所做的更改相同。
答案 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并右键单击上下文菜单(在“对象资源管理器”中的视图上),然后转到“脚本视图为”和“拖放并创建到”。