5

そのため、開発中のプログラムの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 ServerManagementStudioでのみテストしていることを指摘しておきます。

また、コメント投稿者が作成クエリを要求したので、次のようになります。

...
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フィールドが、最初に作成した後、かなり後にテーブルに追加されたことも指摘しておきます。

4

3 に答える 3

2

結局、根本的な原因を発見することなく、問題を解決することができました。MaterialCostフィールドは、すでにかなりの量のデータが含まれていた後、かなり後にテーブルに追加されたため、明らかに奇妙なことが起こっていました。

問題を解決するために、元のテーブルのコピーを作成し、すべてのデータを新しいテーブルにコピーして、元のテーブルを削除しました。その後、insertステートメントは正しく機能しました。私が言ったように、それは今は機能しますが、そのフィールドが新しいことを除いて、根本的な原因についての詳細は実際にはありません。

于 2012-06-08T13:49:53.930 に答える
0

その列のallownullを削除し、プログラムが例外を発生させるかどうかを確認します。きっとそうなるでしょう。コードがその列に値を入れていない場所もあります。

于 2012-06-07T21:01:29.747 に答える
0

トリガーを確認します。ビジネスルールに適合しない場合、何かが値を削除している可能性があります。

于 2012-06-07T21:48:31.240 に答える