【发布时间】:2010-04-14 00:00:10
【问题描述】:
我的代码没有更新线程字段。它是空的。有人有什么想法吗?
INSERT INTO [Messages]([Sender], [Receiver], [Job_Number], [Subject], [MessageText], [DateSent])
VALUES(@Sender, @Receiver, @Job_Number, @Subject, @MessageText, @DateSent)
SET @ThreadID = SCOPE_IDENTITY()
UPDATE [Messages]
SET Thread = @ThreadID
WHERE MessageID = @ThreadID
编辑: 似乎根本没有执行 UPDATE 例程。我什至在 sproc 的末尾添加了以下代码,但没有任何更新。
UPDATE Comments
SET SomeField = @ThreadID
where SCID = 33
编辑:
/****** Object: Table [dbo].[Messages] Script Date: 04/09/2010 12:08:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Messages](
[MessageID] [int] IDENTITY(1,1) NOT NULL,
[Sender] [varchar](30) NOT NULL,
[Receiver] [varchar](30) NOT NULL,
[Job_Number] [varchar](20) NULL,
[Subject] [varchar](200) NULL,
[MessageText] [varchar](max) NULL,
[DateSent] [datetime] NULL,
[Thread] [int] NULL,
CONSTRAINT [PK_Messages] PRIMARY KEY CLUSTERED
(
[MessageID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Messages] ADD CONSTRAINT [DF_Messages_DateSent] DEFAULT (getdate()) FOR [DateSent]
GO
编辑: 当我从 Management Studio 执行存储过程时,更新工作正常。当我使用 SQLHelper 调用它时,问题出在我的应用程序中:
SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString,
"spMessagesInsert",
0,
message.Sender,
message.Receiver,
message.Job_Number,
message.Subject,
message.MessageText,
message.DateSent
);
编辑:最终,我更改了程序代码以使用 Linq-to-sql 而不是使用 SqlHelper 调用存储过程。这似乎解决了这个问题。
【问题讨论】:
-
您确定在 Messages 表中指定了标识列吗?
-
更具体地说,MessageID 是身份列吗?目前,您似乎正在将新 ID 复制到同一行中的另一列(线程),这似乎毫无意义。
-
是的,MessageID 是身份列。我这样做是为了对消息进行分组 - 这并非毫无意义。
-
您能否为该表发布您的确切脚本 DDL?
-
@CodeByMoonlight - 当多行具有相同的 ThreadID(实际上是第一行的 messageID)时,我使用它对消息进行分组。请不要再问它的有效性,因为它不是重点。
标签: sql-server tsql sql-server-2008 identity