【问题标题】:How to alter user defined table types如何更改用户定义的表类型
【发布时间】:2015-04-25 13:47:31
【问题描述】:

我已经尝试更改用户定义的表类型,但它不能与 altercomm 一起使用。

alter TYPE [dbo].[GriDDateTab] AS TABLE(
    [Application [varchar](50) NOT NULL,
    [LandDist] [char](2) NULL,
    [Land] [char](3) NULL,
    [LandVi] [char](4) NULL)

【问题讨论】:

  • 如果你甚至 看过 official MSDN SQL Server Books Online - 你会看到 is no ALTER TYPE 声明。只是不在那里。您需要删除您的类型并重新创建它。
  • [Application 更改为 [Application] ;)。
  • @marc_s - 即使 OP 已经查看了您引用的文档,他的问题也不是无效的。虽然语法“ALTER TYPE”没有作为选项列出,但如果他认为实现结果还需要一些其他语法变化,那将是愚蠢的。虽然 SQL 开发人员必须有充分的理由不允许这样做,但从表面上看,这是不可能的,这确实看起来很荒谬。首先要求删除所有引用对象是非常严格的。
  • @ChrisRogers: 绝对 - 缺少 ALTER TYPE 确实使用户定义的类型几乎毫无用处 - 至少对我而言

标签: sql-server alter user-defined-types


【解决方案1】:

您必须放弃并重新创建。这意味着如果您有任何使用该类型的引用(例如存储过程),则必须首先删除该引用。

【讨论】:

    【解决方案2】:

    坏消息是您必须删除并重新创建,因为 SQL Server 不支持(至少直到 2012 年才支持此功能。

    好消息是存储过程和函数应该即时获取表类型更改,而无需删除和重新创建。

    【讨论】:

    • 我不相信这个好消息是真的,看看其他答案
    • --以下脚本演示了(至少从 2014 年开始,它可以创建类型 t_demo 作为表(intfield int)创建过程 p_demo 作为声明 @t t_demo begin select * from @t end go exec p_demo go drop type t_demo go create type t_demo as table (intfield int, textfield nvarchar(50)) go exec p_demo
    • @EdGreen - 除非它是参数,否则它似乎不会注册为依赖项。例如,以这种方式定义您的存储过程:创建过程 p_demo (@t t_demo READONLY) as begin select * from @t end go。你会看到问题所在。嗯。不知道为什么。我找不到任何关于依赖项的信息,仅在参数 defs 中。
    【解决方案3】:

    遗憾的是,所说的一切都是真的,但是您可以通过转到表格类型的上下文菜单->将用户定义的表格类型编写为...来节省一些时间。

    如果您使用 DROP 和 CREATE To Query Window,您可以进行编辑并单击执行。

    您仍然需要在其他可编程性结构中重新创建引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      相关资源
      最近更新 更多