取决于输入 ID 或名称的 SQL Server 序列

SQL Server sequence depending on input id or name

提问人:Martin Bre 提问时间:5/30/2022 最后编辑:Martin Bre 更新时间:5/30/2022 访问量:70

问:

我想使用不同的序列,具体取决于我要添加的数字类型。

编号池

编号 名字 描述 sequence_name
1 项目 项目 seq_items
2 文件 存储的文档 seq_docs

编号表

Number_Type_id more_metadata
1 1
1 2 酒吧
1 3 福巴尔
2 1 巴福

通常,我会首先获取给定数字类型的序列:

SELECT * FROM numberpool 
WHERE NumberPool.name LIKE "item"`

-> NumberPool.id = 1, sequence_name= 'seq_item'

INSERT INTO NumberTable (Number_Type_id, number,  metadata)
OUTPUT Inserted.number 
VALUES (3, NEXT VALUE FOR DBO.seq_items, 'foo')

有没有办法映射?numberpool.id

INSERT INTO NumberTable (Number_Type_id, number, metadata)
OUTPUT Inserted.number, Inserted.metadata 
VALUES (3, 'foo')

还是按顺序?numberpool.name

INSERT INTO NumberTable (Number_Type_id, number, metadata)
OUTPUT Inserted.number, Inserted.metadata 
VALUES ('item', 'foo')

这样,我就不需要知道客户端的 id。我不确定这是否是一个好主意,或者我的数据库结构是否需要一些工作。

sql-server 序列

评论

0赞 Thom A 5/30/2022
这听起来你应该有 2 个表,然后你可以轻松地将 2 个表设置为具有不同的(或只使用 ).SEQUENCEIDENTITY
0赞 Martin Bre 5/30/2022
@Larnu:我有 10 个池,将来很可能会添加更多。我刚刚删除了其他池,以便于阅读;)
0赞 Thom A 5/30/2022
那么你大概需要 10 张桌子。
0赞 Martin Bre 5/30/2022
对于 ids,我可以在插入中做一个子选择,但我不知道如何用子选择替换(select ID,sequence_name from NumberPool where name = 'documents')NEXT VALUE FOR DBO.seq_items
0赞 Thom A 5/30/2022
如果你的意思是一个子查询,那将是,但你不妨做......使用子查询不会添加任何内容。(SELECT NEXT VALUE FOR DBO.seq_items)NEXT VALUE FOR DBO.seq_items

答: 暂无答案