eko*_*lis 4 sql-server user-defined-table-type
我知道关于这个问题还有其他问题,但这个问题真的很简单,所以我不是在寻找一个复杂的答案!
所以我有这个脚本:
IF EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N'IDListTableType' AND ss.name = N'dbo')
DROP TYPE [dbo].[IDListTableType]
GO
IF NOT EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N'IDListTableType' AND ss.name = N'dbo')
CREATE TYPE [dbo].[IDListTableType] AS TABLE(
[ID] [int] NOT NULL,
UNIQUE NONCLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
Run Code Online (Sandbox Code Playgroud)
运行它时出现错误,因为它IDListTableType
在数据库中的其他地方被引用。因此,我需要一种方法来更改表类型,或者查找并删除并重新创建所有其他引用IDListTableType
. 有没有一种简单的方法可以做到这一点?
最简单的方法是使用更新的定义创建一个新类型,然后您可以一次(或一次)更改受影响的对象以引用新名称。你不能拉桌布。
我在这里写了一篇关于这个的文章:
基本过程是:
棘手的部分是 #2,人们会手动狩猎和啄食,或者尝试解析OBJECT_DEFINITION
或sys.sql_modules
,但以下更可靠:
SELECT s.name, o.name, def = OBJECT_DEFINITION(d.referencing_id)
FROM sys.sql_expression_dependencies AS d
INNER JOIN sys.objects AS o
ON d.referencing_id = o.[object_id]
INNER JOIN sys.schemas AS s
ON o.[schema_id] = s.[schema_id]
WHERE d.referenced_database_name IS NULL
AND d.referenced_schema_name = N'dbo'
AND d.referenced_entity_name = N'MyType';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
490 次 |
最近记录: |