【问题标题】:How to get Primary Key on SQL Update?如何获取 SQL 更新的主键?
【发布时间】:2015-01-08 19:54:15
【问题描述】:

如果找到“searchedWord”,我将更新表格。如果找到它,我想知道我刚刚更新的记录的主键是什么。我该怎么做?下面是我的代码。附带说明一下,如果找不到“searchedWord”,我将其插入并使用 scope_identity() 来获取它。我的问题是如何对更新做同样的事情?我想我可以先做一个 select 语句,但这是一个额外的查询。

BEGIN TRAN    
    UPDATE COBC_searchedWord 
    SET searchCount=searchCount+1, 
        resultsReturned=#resultsReturned#, 
        lastSearched=getDate() 
    WHERE searchedWord='#searchedWord#';

    IF @@ROWCOUNT = 0
    BEGIN
        INSERT INTO COBC_searchedWord
            ([searchedWord] ,[searchCount] ,[resultsReturned] ,[lastSearched])
        VALUES
            ('#searchedWord#',1,'#resultsReturned#',getDate())
        SELECT scope_identity() AS searchedWordID
    END
COMMIT TRAN

更新:这就是我最终的结果,它似乎有效。感谢您的意见。

DECLARE @tmpTable TABLE (ID int);  
UPDATE COBC_searchedWord
SET searchCount=searchCount+1, 
    resultsReturned=#resultsReturned#, 
    lastSearched=getDate()  
OUTPUT inserted.searchedWordID into @tmpTable          
WHERE searchedWord='#searchedWord#';          

IF @@ROWCOUNT = 0  
BEGIN  
    INSERT INTO COBC_searchedWord  
        ([searchedWord])         
        OUTPUT inserted.searchedWordID into @tmpTable  
    VALUES  
        ('#searchedWord#');  
END  
SELECT ID from @tmpTable;

【问题讨论】:

  • 主键不变。这是计划的一部分。您需要在查询之前知道它。对我来说,动态地找出它是没有意义的。

标签: sql tsql primary-key


【解决方案1】:

您应该使用 OUTPUT 子句。在线书籍将解释如何。

【讨论】:

【解决方案2】:

试试这个,如果你正在更新你的记录,并且在表中找到了搜索词,然后从表中选择 searchedWordID

BEGIN TRAN    
    UPDATE COBC_searchedWord 
    SET searchCount=searchCount+1, 
        resultsReturned=#resultsReturned#, 
        lastSearched=getDate() 
    WHERE searchedWord='#searchedWord#';

    IF @@ROWCOUNT = 0
    BEGIN
        INSERT INTO COBC_searchedWord
            ([searchedWord] ,[searchCount] ,[resultsReturned] ,[lastSearched])
        VALUES
            ('#searchedWord#',1,'#resultsReturned#',getDate())
        SELECT scope_identity() AS searchedWordID
    END
    ELSE
    BEGIN
      SELECT searchedWordID FROM COBC_searchedWord 
      WHERE searchedWord='#searchedWord#';
    END
COMMIT TRAN

【讨论】:

  • 当信息可以通过OUTPUT 子句从 UPDATE 中轻松获得时,没有理由执行任何额外的 SELECT。
  • 但是您没有使用 select 来从 OUTPUT 子句中获取信息吗?请参阅上面的更新。
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多