**编辑:已解决 - 谢谢大家!由于我的低代表,我不能'投票'你的任何回复,但我很感激他们!
编辑2:现在足够高,向所有人投票!**
好吧,我有一个运行一些插入的sproc,将新记录标识分配给变量,然后将它们插入到另一个表中。问题是某些插入不插入(如果没有要插入的数据)但是SCOPE_IDENTITY();来自前一个插入...在下面的代码中,我希望@ NewId2为null,但它包含前一个插入的id。我应该怎么做才能防止@ NewId2出现“错误的ID?”
CREATE TABLE #tempdemo (
theId int IDENTITY(100,3),
theField varchar(20)
)
DECLARE @NewId1 int
DECLARE @NewId2 int
INSERT INTO
#tempdemo
(theField)
SELECT
'test1'
--this would have a "from table" in a real situation
WHERE
1 = 1
SET @NewId1 = SCOPE_IDENTITY();
INSERT INTO
#tempdemo
(theField)
SELECT
'test2'
--this would have a "from table" in a real situation
WHERE
1 = 2 --obviously fails, in my real situation there are times the insert has nothing to insert
SET @NewId2 = SCOPE_IDENTITY();
select '@NewId1 = ', @NewId1, '@NewId2 = ', @NewId2
drop table #tempdemo
答案 0 :(得分:7)
插入后,如果scope_identity()
大于0,请将@@rowcount
保存在变量中。
EX:
DECLARE @MY_NEW_ID INT
INSERT INTO TABLE2 (COL1)
SELECT VAL1
FROM TABLE1
WHERE X=Y
IF @@ROWCOUNT>0
BEGIN
SET @MY_NEW_ID = SCOPE_IDENTITY()
END
/* DO MORE INSERTS HERE ... */
IF @MY_NEW_ID IS NOT NULL
BEGIN
INSERT INTO TABLE3 (NEWID) VALUES @MY_NEW_ID
END
答案 1 :(得分:3)
你可以试试这个:
IF @@ROWCOUNT<>0
SET @NewId2 = SCOPE_IDENTITY();
答案 2 :(得分:1)
您可以使用@@ROWCOUNT
检查插入的行数。
E.g。
IF (@@ROWCOUNT > 0)
BEGIN
-- Other inserts
END