【问题标题】:Get SQL Computed Column Inserted Value获取 SQL 计算列插入值
【发布时间】:2011-09-15 08:12:47
【问题描述】:

我的表结构如下,

CREATE TABLE tbl_Info
(
    [SSEID]         BIGINT              NOT NULL    IDENTITY(1,1),
    [ShortenKey]    AS ConvertToBase([SSEID]),
    [Title]         VARCHAR(500)        NULL,       
)

ConvertToBase功能如下,

CREATE FUNCTION ConvertToBase(@Number BIGINT)
RETURNS VARCHAR(15)
AS 
BEGIN
      // implementation
END

我需要在 sp.INSERT 查询后获取生成的 [ShortenKey] 值。如何做到这一点?

【问题讨论】:

    标签: sql-server calculated-columns sql-function autogeneratecolumn


    【解决方案1】:

    使用OUTPUT clause?

    INSERT tbl_Info (Title)
    OUTPUT INSERTED.ShortenKey
    VALUES ('new title')
    

    注意:如果我没看错的话,MSDN 说可能无法使用计算列。

    【讨论】:

    • 感谢您的回复,但此错误..."列 'inserted.ShortenKey' 无法在 OUTPUT 子句中引用,因为列定义包含子查询或引用执行用户或系统数据的函数访问。默认情况下,如果函数不是架构绑定的,则假定它执行数据访问。考虑从列定义中删除子查询或函数或从 OUTPUT 子句中删除列。"
    • 将 WITH SCHEMABINDING 添加到函数中
    【解决方案2】:

    使用SCOPE_IDENTITY 获取新的标识值。然后查询新插入的行。

    SELECT ShortenKey
    FROM dbo.tbl_Info
    WHERE SSEID = SCOPE_IDENTITY()
    

    【讨论】:

    • @gbn 我的代码示例返回 ShortenKey。我错过了什么吗?
    【解决方案3】:
    SELECT ShortenKey
    FROM dbo.tbl_Info
    WHERE SSEID = SCOPE_IDENTITY()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多