所以我正在为我正在开发的程序开发一些SQL,而且我遇到了一个我以前从未见过的奇怪问题。这是给我带来麻烦的查询:
insert into [db].[dbo].[table] (JobNum, JobSeq, OperationNumber, WorkCenter,
ResourceGroup, Material, MaterialQuantity, MaterialCost, LbrHoursPerPiece,
ExtendedDescription, PreviousMaterial, UniqueID)
values ('J000001234', 1234, 123, 'UFAN', 'FANASSY', '12345678',
4, 50, 1, 'DESC', '', '')
然后我从同一张表中做一个选择:
SELECT * FROM [db].[dbo].[table]
where JobNum = 'J000001234'
这就是返回的内容:
由于某种原因,即使我给它一个50的值,MaterialCost字段显示为NULL,我无法弄清楚为什么其他一切正确插入。这是表设计,以防万一:
有什么想法吗?
编辑:我想指出,虽然这是我在.NET代码中使用的查询,但现在我只在SQL Server Management Studio中测试它。
此外,评论者要求创建查询,所以:
...
CREATE TABLE [dbo].[table](
[JobNum] [nvarchar](20) NOT NULL,
[JobSeq] [int] NOT NULL,
[OperationNumber] [int] NULL,
[WorkCenter] [nvarchar](6) NULL,
[ResourceGroup] [nvarchar](30) NULL,
[Material] [nvarchar](30) NULL,
[MaterialQuantity] [decimal](18, 8) NULL,
[MaterialCost] [decimal](18, 5) NOT NULL,
[LbrHoursPerPiece] [decimal](10, 5) NULL,
[ExtendedDescription] [nvarchar](300) NULL,
[PreviousMaterial] [nvarchar](300) NULL,
[UniqueID] [varchar](200) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
ALTER TABLE [dbo].[Table] ADD CONSTRAINT [DF_Table_MaterialCost] DEFAULT ((0.00)) FOR [MaterialCost]
GO
编辑2:所以我接受了CREATE TABLE查询并使用它来创建另一个表tableTEST,它与故障表相同。在TEST表上执行相同的查询时,它工作正常。我还想指出,在最初创建它之后很久以后,没有获得正确数据的MaterialCost字段被添加到表中。
答案 0 :(得分:1)
最后,我能够在没有发现根本原因的情况下解决问题。 MaterialCost字段在它已经拥有相当大量的数据之后很久才被添加到表中,因此显然有些奇怪的事情发生在那里。
为解决我的问题,我创建了原始表的副本,将所有数据复制到新表中,然后删除原始表。执行此操作后,insert语句正常工作。就像我说的那样,它现在有效,但除了该字段是新的之外,我真的没有任何关于根本原因的细节。
答案 1 :(得分:0)
删除该列上的允许空值,并查看程序是否引发异常。我相信会的。一些代码没有将值放入该列的地方。
答案 2 :(得分:0)
检查触发器,如果不符合业务规则,可能会移除您的值。