如何解决如何使用新名称创建与现有表类型相同的 SQL 用户定义表类型?
我正在尝试创建一个工具,该工具将在 MS sql Server 上的数据库中查找以 const multer = require('multer');
const { v4: uuid } = require("uuid");
const TYPE_IMAGE = {
'image/png': 'png','image/jpeg': 'jpeg','image/jpg': 'jpg'
};
const TYPE_File = {
'application/pdf': 'pdf',};
const fileUpload =
multer({
limits: 500000,storage: multer.diskStorage({
destination: (req,file,cb) => {
cb(null,'uploads/images');
},filename: (req,cb) => {
const ext = (TYPE_IMAGE[file.mimetype]) ? TYPE_IMAGE[file.mimetype] : TYPE_File[file.mimetype];
cb(null,uuid() + '.' + ext);
}
}),fileFilter: (req,cb) => {
let size = +req.rawHeaders.slice(-1)[0]
let isValid =false;
if(!!TYPE_IMAGE[file.mimetype] && size < 4 * 1024 * 1024 ){
isValid = true
}
if(!!TYPE_File[file.mimetype] && size < 1 * 1024 * 1024 ){
isValid = true
}
let error = isValid ? null : new Error('Invalid mime type!');
cb(error,isValid);
}
}).any();
module.exports = fileUpload;
开头的用户定义表类型,然后创建一组相同的新用户定义表类型,但在名称末尾附加 ABC
。
因此,例如,如果我在包含三个名为 -X
、MyUdt
和 YourUdt
的 UDT 的现有 sql 数据库上运行这个理论工具,结果将是数据库现在将包含四个 UDT:ABCUdt
、MyUdt
、YourUdt
和 ABCUdt
。
这似乎与有关如何创建匹配表的 UDT 的问题非常相似:https://imgur.com/a/R8iTm9n
我知道 sql 数据库包含其每个存储过程的定义作为文本,可以在 ABCUdt-X
表上查询,但似乎没有这样的 UDT 定义存储。
在我不厌其烦地编写将现有 UDT 分解为语句以创建新 UDT 的代码之前,谁能告诉我是否有一种方法可以编写如下命令:“嘿 MS sql Server, UDT sys
并创建另一个与它完全一样的名为 ABCUdt
"?
解决方法
与用户定义表一样,SQL Server 在系统视图中存储用户定义表类型及其列的定义,例如:
drop type if exists dbo.ABCTest;
create type dbo.ABCTest as table (
TestID int not null,TestName nvarchar(50)
);
declare @type_table_object_id int = (
select type_table_object_id
from sys.table_types
where [name] = N'ABCTest'
);
select * from sys.table_types where type_table_object_id = @type_table_object_id;
select * from sys.all_columns where object_id = @type_table_object_id;
姓名 | system_type_id | user_type_id | schema_id | principal_id | 最大长度 | 精度 | 规模 | collation_name | is_nullable | is_user_defined | is_assembly_type | default_object_id | rule_object_id | is_table_type | type_table_object_id | is_memory_optimized |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ABCTest | 243 | 257 | 1 | NULL | -1 | 0 | 0 | NULL | 0 | 1 | 0 | 0 | 0 | 1 | 1778105375 | 0 |
object_id | 姓名 | column_id | system_type_id | user_type_id | 最大长度 | 精度 | 规模 | collation_name | is_nullable | is_ansi_padded | is_rowguidcol | is_identity | is_computed | is_filestream | is_replicated | is_non_sql_subscribed | is_merge_published | is_dts_replicated | is_xml_document | xml_collection_id | default_object_id | rule_object_id | is_sparse | is_column_set | generated_always_type | generated_always_type_desc | 加密类型 | encryption_type_desc | encryption_algorithm_name | column_encryption_key_id | column_encryption_key_database_name | is_hidden | is_masked | graph_type | graph_type_desc |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1778105375 | 测试ID | 1 | 56 | 56 | 4 | 10 | 0 | NULL | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOT_APPLICABLE | NULL | NULL | NULL | NULL | NULL | 0 | 0 | NULL | NULL |
1778105375 | 测试名称 | 2 | 231 | 231 | 100 | 0 | 0 | Latin1_General_100_CI_AS | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOT_APPLICABLE | NULL | NULL | NULL | NULL | NULL | 0 | 0 | NULL | NULL |
您可以根据此信息重新生成用户定义表类型的 SQL 定义,以实现使用不同名称重新创建它,但正如 SMor 在评论中所说,让 SMO 为您完成这项工作可能更容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。