在SQL中组合两个ID以获得主键

在SQL中组合两个ID以获得主键,sql,sql-server,tsql,Sql,Sql Server,Tsql,大家好, 也许有人可以帮助我解决tsql中的问题: 在我的sql数据库中,每个国家都有不同的ID,例如: 国家ID 德国-1 奥地利-2 瑞士-3 意大利-4 我数据库中的每个产品都有自己的ID,但方式不同: 产品标识 自行车-100,1,2 汽车-200,1,4 列车-2000,1,2 现在,我想为每个组合创建一个PK/FK,每个组合正好有14个数字。 它应该如下所示: 10国家/地区编号00第二个产品编号0第三个产品编号000第一个产品编号 例如: 德国自行车=101001020000100

大家好,

也许有人可以帮助我解决tsql中的问题:

在我的sql数据库中,每个国家都有不同的ID,例如:

国家ID

德国-1 奥地利-2 瑞士-3 意大利-4 我数据库中的每个产品都有自己的ID,但方式不同:

产品标识

自行车-100,1,2 汽车-200,1,4 列车-2000,1,2 现在,我想为每个组合创建一个PK/FK,每个组合正好有14个数字。 它应该如下所示:

10国家/地区编号00第二个产品编号0第三个产品编号000第一个产品编号

例如:

德国自行车=101001020000100 瑞士自行车=103001020000100 德国车=10100104000200 德国列车=101001020000 意大利列车=104001020000 我的问题是,产品ID的第一个编号有时是三位数,有时是四位数,但PK/FK应该始终正好有14位数

我已经尝试了很多不同的方法,但是还没有达到预期的代码

如果有人能帮助我,我将非常感激

非常感谢你

最好的三明治,
詹姆

我认为这不是个好主意


但是您的问题是4位代码前面的位置应该少一个零吗?然后使用lpad。

虽然这不是一个好方法,但您可以通过以下方式实现:

选择 海螺 '10', 卡斯蒂德·瓦查尔3号, '00', 子字符串ProductID,CHARINDEX',,ProductID+1,1, '0', SUBSTRINGSUBSTRINGProductID,CHARINDEX',',,ProductID+1,lenProductID,CHARINDEX',',,SUBSTRINGProductID,CHARINDEX',',,ProductID+1,lenProductID+1,1, 当lensubstringProductID,1,charindex',,ProductID-1=4时,则为'00'或'000'结束, 子字符串ProductID,1,charindex',,ProductID-1 来自so1
我强烈反对这种做法。您正在赋予表的主键意义。此外,您将所有内容都放在一个列中,这将很难更新和更改。更重要的是,您将无法保证这方面的引用完整性。如果意大利的ID发生变化会发生什么是的,不太可能,但有可能。最好是用实际列构建复合键,而不是像这样的计算列。我不明白为什么要这样做?这感觉很像一个。当ProductID的第一个编号为四位数时,您想做什么?是否要从最后一个0中删除一个“0”或?是的,我想从它前面的三个0中删除一个0。以后,您应该实际解释您的代码。非常感谢!我不得不调整一些小东西,但现在我明白了。我知道这不是最好的方法,但我需要这样把它放在我的桌子上。@DavidG是的,你是对的。那有点肤浅。