【发布时间】:2012-10-15 00:26:04
【问题描述】:
我正在创建将从我的 C# 应用程序调用的存储过程,并将主/详细信息输入 SQL Server。在 Header 表中,我将 TransactionId 作为 Identity 列,这样每次插入时我都会获得一个唯一的 ID。当我为详细信息表调用存储过程时,我想使用 Header 中的 PK ID 并将其插入到详细信息的 FK 中。确保我取回刚刚在 Header 表中创建的 ID 的最佳方法是什么?
CREATE TABLE [dbo].[Header835]
(
[TRANSACTIONID] [int] IDENTITY(1, 1) NOT NULL
, [FILENAME] [varchar](80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
, [TRADINGPARTNERNAME] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
, [ISACRTL] [numeric](18, 0) NOT NULL
, [STCRTL] [numeric](18, 0) NOT NULL
, CONSTRAINT [PK_Header835] PRIMARY KEY CLUSTERED
(
[TRANSACTIONID] ASC
) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
【问题讨论】:
-
我尝试从表中获取最大 ID( SET @TEMPTRANXID = (SELECT MAX(H.TRANSACTIONID) FROM [DB].[dbo].[HeaderTable] H))但我在想如果应用程序的不同实例对表进行多次调用,这可能并不总是有效。
-
创建表 [dbo].[Header835]( [TRANSACTIONID] [int] IDENTITY(1,1) NOT NULL, [FILENAME] [varchar](80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [TRADINGPARTNERNAME] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [ISACRTL] [numeric](18, 0) NOT NULL, [STCRTL] [numeric](18, 0) NOT NULL, CONSTRAINT [PK_Header835] PRIMARY KEY CLUSTERED ([TRANSACTIONID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
-
您是否允许用户多次使用相同的文件名?如果您以后需要对其进行审核,那可能会变得很糟糕。
-
是的,但我正在考虑在每次处理文件名时为其添加时间戳。有什么建议吗?
-
我不知道您现在正在使用的应用程序,但我认为允许用户上传相同的文件不是一个好主意,即使有时间戳也是如此。对于我的应用程序,我在他们上传文件时将文件保存到服务器,如果它已经存在则抛出错误,以便在审核时我们可以回顾并查看发送到应用程序的所有内容。
标签: c# sql-server stored-procedures transactions master-detail