我在数据库中创建了一些用户定义的类型,如下所示
CREATE TYPE [dbo].[StringID] FROM [nvarchar](20) NOT NULL
并将它们分配到不同的表中。我的数据库中的表具有各种模式(不仅dbo
)
但我意识到我需要更大的领域,并且我需要改变,例如增加[nvarchar](20)
to [nvarchar](50)
,但是没有ALTER TYPE
陈述。
我需要一个使用临时表/游标的脚本,并保存使用我的类型的所有表和字段。然后将现有字段更改为基本类型 - 例如从CustID [StringID]
to CustID [nvarchar(20)]
。
删除用户类型并使用新类型重新创建它 - 例如nvarchar(50)
最后将字段设置回用户类型
我没有在类型上定义规则,因此不必删除规则并重新添加它们。
任何帮助表示赞赏。
这是我通常使用的,尽管有点手动:
/* Add a 'temporary' UDDT with the new definition */
exec sp_addtype t_myudt_tmp, 'numeric(18,5)', NULL
/* Build a command to alter all the existing columns - cut and
** paste the output, then run it */
select 'alter table dbo.' + TABLE_NAME +
' alter column ' + COLUMN_NAME + ' t_myudt_tmp'
from INFORMATION_SCHEMA.COLUMNS
where DOMAIN_NAME = 't_myudt'
/* Remove the old UDDT */
exec sp_droptype t_mydut
/* Rename the 'temporary' UDDT to the correct name */
exec sp_rename 't_myudt_tmp', 't_myudt', 'USERDATATYPE'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)