sql - 如何获取 SQL 更新的主键?

标签 sql t-sql primary-key

如果找到“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;

最佳答案

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

关于sql - 如何获取 SQL 更新的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848445/

相关文章:

MySQL - 一个子查询和一个 WHERE IN

sql - 如何汇总非工作日期的数据?

c# - 将 T-SQL 连接到 C++ 或 C#

sql - 如何连接到需要另一个连接表中的参数的函数?

sql - 将一组行显示为单行

php - 如何防止 PHP 中的 SQL 注入(inject)?

SQL 优化 - 字符串中的字数统计 - Postgresql

MySQL:#1075 - 表定义不正确;自动增量与另一个键?

mysql - 如何删除主键?我得到不正确的表定义

Mysql 中间表 - 最好有重复行?