【发布时间】:2021-11-20 13:39:00
【问题描述】:
我正在使用一个在表中插入值的存储过程:ID 和当前日期。我知道如何使用 SCOPE_IDENTITY 获取上次使用的 ID,但我还需要 SELECT 刚刚插入的日期。有什么想法吗?
ALTER PROCEDURE [dbo].[sp_InsertOrderHeader]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO OrderHeaders (OrderStateId,DateTime) VALUES (1,GETDATE());
SELECT CONVERT(int, SCOPE_IDENTITY()) Id
END
【问题讨论】:
-
或者只是将 GETDATE() 添加到您的最后一个选择语句中?尽管在这种情况下不太可能,但您可能希望将 GETDATE 分配给一个变量,以便您的代码对过程中的每个语句使用完全相同的值。然后,您只需将该变量添加到您的 select 语句而不是函数调用中。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本没有前缀! -
我已经编写了存储过程,其中有一堆已经以 sp_ 为前缀,但感谢您的提醒......这么多规则。
标签: sql sql-server tsql stored-procedures