当前位置:Gxlcms > 数据库问题 > 关于SQL Server中修改“用户自定义表类型”的问题

关于SQL Server中修改“用户自定义表类型”的问题

时间:2021-07-01 10:21:17 帮助过:56人阅读

判断Type是否存在,如果存在,重命名,随后之后才再删除,否则无法直接删除 IF EXISTS (SELECT 1 FROM sys.types t join sys.schemas s on t.schema_id=s.schema_id and t.name=MyTableType and s.name=dbo) EXEC sys.sp_rename dbo.MyTableType, obsoleting_MyTableType; GO --重建TYPE,比如原来是四个字段,现在想修改为三个字段,或者原来有三个字段想加一个字段变成四个字段 CREATE TYPE dbo.MyTableType AS TABLE( Id INT NOT NULL, Name VARCHAR(255) NOT NULL,
   Remark
VARCHAR(255)
)
GO

--将原来引用将要删除的TYPE全部重建一遍,否则原始存储过程会报错
DECLARE @Name NVARCHAR(500);
DECLARE REF_CURSOR CURSOR FOR
SELECT referencing_schema_name + . + referencing_entity_name
FROM sys.dm_sql_referencing_entities(dbo.MyTableType, TYPE);
    OPEN REF_CURSOR;
    FETCH NEXT FROM REF_CURSOR INTO @Name;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        EXEC sys.sp_refreshsqlmodule @name = @Name;
        FETCH NEXT FROM REF_CURSOR INTO @Name;
    END;
CLOSE REF_CURSOR;
DEALLOCATE REF_CURSOR;
GO

--最后删除原始的被重命名的TableType(被第一步重名的那个)
IF EXISTS (SELECT 1 FROM sys.types t 
            join sys.schemas s on t.schema_id=s.schema_id 
            and t.name=obsoleting_MyTableType and s.name=dbo)
   DROP TYPE dbo.obsoleting_MyTableType
GO

--最后执行授权
GRANT EXECUTE ON TYPE::dbo.MyTableType TO public
GO

 

 

总结:

  TableType可以方便地接受二维数据作为参数,从而可以达到批量处理数据的目的,避免传递进去一大堆字符串,然后在对字符串解析的做法,从而可以在一定程度上提高sql的运行效率。
   不过TableType的修改确实存在一定的问题,直接修改TableType会存在级联删除数据库对象的情况,可以通过“曲线救国”的方式,来减小工作量的情况下修改TableType。

关于SQL Server中修改“用户自定义表类型”的问题

标签:需要   datatable   目的   链接   refresh   行修改   字段   bsp   分享   

人气教程排行