【问题标题】:CREATE TABLE where multiple columns are inserted with same valueCREATE TABLE,其中插入了多个具有相同值的列
【发布时间】:2014-11-11 11:55:32
【问题描述】:

假设我有一个这样的 CREATE TABLE 代码:

CREATE TABLE Test (
  ID int NOT NULL IDENTITY(1,1),
  SortIndex int,
  Name nvarchar(50) NOT NULL
);

我想知道是否可以在 MSSQL 中创建一个表,该表能够在我运行 INSERT 时将 ID 的值插入到 SortIndex 列中。

所以我会运行这个 INSERT:

INSERT INTO Test (Name) VALUES ('Awesome Dude');

通常会产生该行:

ID,SortIndex,Name
1,NULL,"Awesome Dude"

但我希望它自动成为:

ID,SortIndex,Name
1,1,"Awesome Dude"

这甚至可以通过更改 CREATE TABLE 脚本来实现,还是我必须使用 TRIGGER?

【问题讨论】:

  • 在这种情况下,sortindex 列提供了 ID 没有提供的什么?
  • 一个触发器将是要走的路
  • @DavidG 它使他能够更新它。这是一个排序键,我希望从名称中可以更改。
  • @AllanS.Hansen 没错 :)
  • @DavidG 但触发器不会自动知道触发它的插入的身份吗?因此,在同时发生两个插入的情况下,会触发两个触发器,每行一个。还是我在这里大错特错?

标签: sql sql-server sql-insert create-table


【解决方案1】:

我会对此采取稍微不同的方法。如果您希望您的 SortIndex 默认为 ID,但可以覆盖,我会使用可为空的列和计算列:

CREATE TABLE Test (
  ID int NOT NULL IDENTITY(1,1),
  OverrideSortIndex int,
  Name nvarchar(50) NOT NULL,
  SortIndex AS ISNULL(OverrideSortIndex, ID)
);  

如果您出于任何原因需要更改排序索引,请更新列OverrideSortIndex,这具有优先权。

【讨论】:

  • 哦,我喜欢这种方法。
  • 我从未见过这样的做法。我得试试这个。谢谢:)
  • 我尝试了这种方法,效果很好。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多