2009-11-10 168 views
0

我正在使用旧数据库。我无法改变架构:(在几个表中,主键使用多列)SQL Server从表中选择主键包含多列的主键

在应用程序中,我将每行中的数据读入表中,然后用户更新数据并写入数据回表。

目前我并置的各种PK列,并将它们存储作为当我把数据回表的唯一ID。

现在我在想,如果有一个更有效的方法从mySQL的背景来看,我不知道任何,但认为SQL Server 2005可能有一个功能

SELECT PRIMARYKEY() as pk, ... FROM table WHERE ... 

以上将选择数据库引擎用作给定记录的主键的密钥

我搜索并找不到任何东西。它可能只是我很挑剔,但我不喜欢连接技巧。

DC

回答

1

在SQL Server中,并没有PRIMARYKEY()的等价物,我真的会意识到这一点。您可以查阅系统目录视图以找出组成主键的哪些列,但不能仅仅通过函数调用来选择主键值。

我会同意StarShip3000 - 你连接你的PK值是什么?虽然我不认为由多个列组成的复合主键肯定是一个非常好的主意,但如果它是一个遗留系统,并且您无法更改它,那么我不会在读取时连接PK值,然后让在您写回数据时再将它们分开。只需保留结构 - 复合键通常不被推荐,但它们确实被支持,没有问题。

+0

我连接读取的键,因为它更容易(在sql语句中,即:选择col1 + col2作为来自blah的uid),然后将结果字符串作为唯一标识存储在Web表单中。当更新表时,我将唯一标识符与where语句中的列连接进行比较,即:update blah where col1 + col2 = uid。这样,连接全部在sql中完成,并且稍后有人更改排序并将其中断的可能性较小。至少那是理论。它丑陋的原因是在主键上有5个整数和一个varchar。 – DeveloperChris 2009-11-10 21:53:10

1

“目前我并置的各种PK列,并将它们存储作为当我把数据回表的唯一ID。” 难道你不能只将pk作为两列存储在目标表中,并使用它来连接回源表上的两列?

串联给你的好处是什么?

+0

他的probaly使用它作为他的编程语言的某种数据结构的关键。不在数据库中。 – idstam 2009-11-10 05:57:58

+0

它是我给出的遗留数据库,原始设计者选择使用多列作为主键。没有第二张桌子。我只是将数据提交给用户,并将所有更改都返回给用户。不幸的是,我无权改变桌子的设计。 – DeveloperChris 2009-11-10 21:45:00