Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SQL Server更新触发器中的空主键_Sql Server_Tsql_Triggers_Primary Key - Fatal编程技术网

Sql server 使用SQL Server更新触发器中的空主键

Sql server 使用SQL Server更新触发器中的空主键,sql-server,tsql,triggers,primary-key,Sql Server,Tsql,Triggers,Primary Key,我正在将我们的系统从Oracle迁移到SQL SERVER。在Oracle中,我们有insert触发器,如果未设置主键,则可以对其进行重新设置。下面是PL/SQL中的代码 create or replace trigger trigg1 before insert on table1 for each row when (new.ID_T1 is null) -- if primary key is null begin select OUR_SEQ.nextval into

我正在将我们的系统从Oracle迁移到SQL SERVER。在Oracle中,我们有insert触发器,如果未设置主键,则可以对其进行重新设置。下面是PL/SQL中的代码

create or replace trigger trigg1
 before insert on table1
  for each row
   when (new.ID_T1 is null) -- if primary key is null
 begin
   select OUR_SEQ.nextval into :new.ID_T1 from dual;
end trigg1;
现在我必须在T-SQL中执行类似的操作。我找到了解决方案,但不幸的是,我必须列出创建表触发器的所有列。这是我想要避免的,因为系统的模型仍然是非常动态的

是否可以在不列出触发器中的所有列的情况下实现这样的触发器


Marcin

只需将您的PK列定义为INT-IDENTITY,并让SQL Server为您处理所有繁重的工作!谢谢你的回复,这太简单了:有时候PK是从客户端应用程序设置的。天哪-然后你必须检查并确保这个值没有被使用??这太疯狂了——说真的:别再那样做了。不要让UI中的用户选择PK!由于2012版之前的SQL Server没有序列,我仍然建议:更改你的应用程序,让SQL Server处理所有PK生成。不,你必须列出所有列。列的定义必须允许null,这意味着您不能将其声明为主键。