2010-05-03 121 views

回答

2

你可以使用INSTEAD OFtrigger来实现类似这样的事情,拦截默认的插入操作以执行检测到现有行的更新。与MySql的变体不同,但更灵活。

-2

我不知道你的申请是什么 - 也许REPLACE可以帮助?!

+1

除了文本替换MS SQL Server没有这样的功能。有一个MERGE,但只有SQL2008。 – 2010-05-03 19:20:50

2

我不熟悉mysql INSERT IGNORE功能,但我正在阅读的文档听起来像它所做的一切都是忽略(无提示失败)尝试插入带有表中已存在的主键的记录。

如果这是您要查找的内容,SQL Server具有类似的功能,但您在创建时必须将其应用于主键或唯一约束。

阅读关于the IGNORE_DUP_KEY option的独特索引。

+1

不幸的是,它不工作,因为我认为它会。它不会发出错误,但会给出警告,这也不是我的解决方案。 – JohnM2 2010-05-03 20:04:35

0

我会说你有两个可行的方案:

一个是你尝试之前过滤掉错误的价值观。也许增加一个where子句就像:

WHERE newValues NOT IN (SELECT pk_col FROM yourTable) 

或者你可以使用try-catch,试试这个:

BEGIN TRY 
    INSERT INTO yourTable(pk_col,other_date) 
    SELECT 'PK Value That Already Exists','saflaksdfj' 
END TRY 

BEGIN CATCH 
    --You can choose to do anything in response to an error like nothing! 
END CATCH