gpt4 book ai didi

sql - 无法更改 sql server 中的自定义类型

转载 作者:行者123 更新时间:2023-12-02 16:05:06 25 4
gpt4 key购买 nike

我有一个使用以下命令创建的自定义类型:

IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'LineItemType')
BEGIN
DROP TYPE dbo.LineItemType
END
GO

CREATE TYPE dbo.LineItemType
AS TABLE
(
Id UNIQUEIDENTIFIER,
Invoice_Id UNIQUEIDENTIFIER,
Cost INT,
Quantity INT,
Total INT,
[Description] NVARCHAR(250)
);
GO

此类型用作我的存储过程之一的参数,如下所示:

IF EXISTS (SELECT 1 FROM sys.procedures WHERE name = 'AddSomething' AND SCHEMA_NAME(schema_id) = 'dbo')
BEGIN
DROP PROCEDURE dbo.AddSomething
END
GO

CREATE PROCEDURE AddSomething
...
@LineItems AS dbo.LineItemType READONLY

AS
BEGIN
...

我的问题是我决定向我的类型添加一些列,我在添加列上面更新了我的脚本,并期望它在运行时简单地删除并重新创建,但我得到了这个错误:

Msg 3732, Level 16, State 1, Line 4 Cannot drop type 'dbo.LineItemType' because it is being referenced by object 'AddSomething'. There may be other objects that reference this type. Msg 219, Level 16, State 1, Line 8 The type 'dbo.LineItemType' already exists, or you do not have permission to create it.

我错过了什么?如何删除我的类型并随时重新创建它?

谢谢。

最佳答案

我认为您必须按以下顺序执行此操作。

  1. 删除所有使用 LineItemType 类型的过程。
  2. DROP LineItemType 类型。
  3. 创建新的 LineItemType 类型。
  4. 创建所有使用 LineItemType 类型的过程。

简而言之,为所有使用 LineItemType 类型的存储过程生成 CREATE 和 DROP 脚本,然后遵循上述顺序。

关于sql - 无法更改 sql server 中的自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com