C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: コミット後にデータを再取得中に問題が発生SqlServer


(過去ログ 68 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■38849 / inTopicNo.1)  コミット後にデータを再取得中に問題が発生SqlServer
  
□投稿者/ sol (12回)-(2009/07/26(Sun) 14:05:06)

分類:[データベース全般] 

VISTA Ultimate SP2
SQL Server 2005 Express Edition

SQL Server 2005 Express Editionで、
テーブルを作成しフィールドをf1,f2と2つ持つとします
キーの設定をせずに、レコードを下記のように直入力でデータを作成すると警告「!」が出ます
これは何故なんでしょう

f1フィールド,f2フィールド

1,Null
1,Null <<--ここで「1」警告が出る

警告の内容--------------------------------------------------
この行は正常にコミットされました
ただし、コミット後にデータを再取得中に問題が発生しました
そのためこの行の表示されたデータは読み取り専用です
この問題を解決するにはクエリーを再実行してください
------------------------------------------------------------

キーの設定をしなければ、重複は許されるとおもうんですがダメですか?
引用返信 編集キー/
■38850 / inTopicNo.2)  Re[1]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ 魔界の仮面弁士 (1169回)-(2009/07/26(Sun) 14:10:31)
No38849 (sol さん) に返信
> テーブルを作成しフィールドをf1,f2と2つ持つとします
再現テストを行ってみたいので、そのテーブルを作成するための
CREATE TABLE 文を提示できますか?

> キーの設定をせずに、レコードを下記のように直入力でデータを作成すると警告「!」が出ます
> これは何故なんでしょう
これは SQL Server Management Studio Express でテーブルを開き、
そこに直接入力した、という意味でしょうか?
引用返信 編集キー/
■38851 / inTopicNo.3)  Re[2]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ sol (13回)-(2009/07/26(Sun) 14:19:16)
No38850 (魔界の仮面弁士 さん) に返信
> ■No38849 (sol さん) に返信
>>テーブルを作成しフィールドをf1,f2と2つ持つとします
> 再現テストを行ってみたいので、そのテーブルを作成するための
> CREATE TABLE 文を提示できますか?

これでいいんでしょうか?

USE [test]
GO
/****** オブジェクト: Table [dbo].[Table_1] スクリプト日付: 07/26/2009 14:12:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1](
[f1] [nvarchar](50) NULL,
[f2] [nvarchar](50) NULL
) ON [PRIMARY]

>
>>キーの設定をせずに、レコードを下記のように直入力でデータを作成すると警告「!」が出ます
>>これは何故なんでしょう
> これは SQL Server Management Studio Express でテーブルを開き、
> そこに直接入力した、という意味でしょうか?

はい!そうです
SQL Server Management Studio Express で「新しいデータベース」を作成しtestを作成しました
またVS 2008 C#でも同じように作成したのですが同じような現象が出ました

なお、f2の部分にデータを入力すると警告は出なかったと記憶しています
上のON [PRIMARY]て部分はもしかして・・・
引用返信 編集キー/
■38864 / inTopicNo.4)  Re[3]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ ベジータ (4回)-(2009/07/27(Mon) 00:54:35)
テーブルにNULL許可になってないのでは?
ちなみにPRIMARYキーはnullは許可できません
引用返信 編集キー/
■38865 / inTopicNo.5)  Re[4]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ sol (16回)-(2009/07/27(Mon) 06:31:13)
No38864 (ベジータ さん) に返信
> テーブルにNULL許可になってないのでは?
> ちなみにPRIMARYキーはnullは許可できません

キーの設定をせずに、レコードを下記のように直入力でデータを作成すると警告「!」が出ます
~~~~~~~~~~~
ここがわからないところ両フィールドNullを許容チェックが入った状態になってます

引用返信 編集キー/
■38867 / inTopicNo.6)  Re[5]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ DDD (3回)-(2009/07/27(Mon) 09:13:18)
よくありますが、おそらくバグです。
引用返信 編集キー/
■38874 / inTopicNo.7)  Re[1]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ みきぬ (557回)-(2009/07/27(Mon) 10:33:21)
No38849 (sol さん) に返信
> 警告の内容--------------------------------------------------
> この行は正常にコミットされました
> ただし、コミット後にデータを再取得中に問題が発生しました
> そのためこの行の表示されたデータは読み取り専用です
> この問題を解決するにはクエリーを再実行してください
> ------------------------------------------------------------
>
> キーの設定をしなければ、重複は許されるとおもうんですがダメですか?

ん、なんか勘違いしてますか?
「正常にコミットされました」って書いてあるじゃないですか。重複レコードは登録されてますよ。

ここからは予想ですが、レコードを登録した後に再取得をするところで、本来は1件取得するところを2件拾ってきてしまったので「ただし、コミット後にデータを再取得中に問題が発生しました」というメッセージが出たんだと思います。
だって、レコードを一意に特定することができないんだもん。
引用返信 編集キー/
■38875 / inTopicNo.8)  Re[6]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ Jitta on the way (360回)-(2009/07/27(Mon) 10:34:41)
No38867 (DDD さん) に返信
> よくありますが、おそらくバグです。

“何が”よくあることなのでしょう?
“何の”バグだとおっしゃるのでしょう?
引用返信 編集キー/
■38877 / inTopicNo.9)  Re[5]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ Jitta on the way (361回)-(2009/07/27(Mon) 10:39:36)
No38865 (sol さん) に返信
> ■No38864 (ベジータ さん) に返信
>>テーブルにNULL許可になってないのでは?
>>ちなみにPRIMARYキーはnullは許可できません
>
> キーの設定をせずに、レコードを下記のように直入力でデータを作成すると警告「!」が出ます
> ~~~~~~~~~~~
> ここがわからないところ両フィールドNullを許容チェックが入った状態になってます
>


キーの設定をせずに、レコードを下記のように直入力でデータを作成すると警告「!」が出ます
これは何故なんでしょう
f1フィールド,f2フィールド
1,Null
1,Null <<--ここで「1」警告が出る

これは、行を二つ作った、ということ?
だったら、おそらく みきぬさんの通り。
引用返信 編集キー/
■38892 / inTopicNo.10)  Re[2]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ sol (17回)-(2009/07/27(Mon) 11:57:04)
No38874 (みきぬ さん) に返信
> ■No38849 (sol さん) に返信
>>警告の内容--------------------------------------------------
>>この行は正常にコミットされました
>>ただし、コミット後にデータを再取得中に問題が発生しました
>>そのためこの行の表示されたデータは読み取り専用です
>>この問題を解決するにはクエリーを再実行してください
>>------------------------------------------------------------
>>
>>キーの設定をしなければ、重複は許されるとおもうんですがダメですか?
>
> ん、なんか勘違いしてますか?
> 「正常にコミットされました」って書いてあるじゃないですか。重複レコードは登録されてますよ。
>
> ここからは予想ですが、レコードを登録した後に再取得をするところで、本来は1件取得するところを2件拾ってきてしまったので「ただし、コミット後にデータを再取得中に問題が発生しました」というメッセージが出たんだと思います。
> だって、レコードを一意に特定することができないんだもん。

商品区分に対する商品など1:Nの関係にある時、同じデータ(レコード)が出来る可能性があると思いまして
実際Accessでは普通(Errもでず)に登録できたので
もしかしてSqlServerはAccessと違い、Key(一意名)項目が必須と言うことでしょうか
読み取り専用は困りますー^^;
引用返信 編集キー/
■38896 / inTopicNo.11)  Re[3]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ みきぬ (561回)-(2009/07/27(Mon) 12:41:19)
No38892 (sol さん) に返信
> 商品区分に対する商品など1:Nの関係にある時、同じデータ(レコード)が出来る可能性があると思いまして
> 実際Accessでは普通(Errもでず)に登録できたので
>
Access ではできますね。
おそらく内部でレコードを一意に特定できるような情報(OracleでいうところのROW_IDみたいなの)を持っていて、それを使ってるんでしょうね。

SQLServer にはそれがないか、あっても外からは扱えないんでしょうね。
Visual Studio のクエリデザイナを使った経験からの推測ですが、主キーがついている場合には主キーを使い、そうでない場合は全カラムの変更前の値を使ってレコードを特定しようとするんじゃないかな。

> もしかしてSqlServerはAccessと違い、Key(一意名)項目が必須と言うことでしょうか
> 読み取り専用は困りますー^^;

SQL Server Management Studio Express のテーブル表示を使った手入力ができないってだけで、UPDATEクエリを書けば更新はできますよ。だから必須とまでは思いません。
もっとも、同一データの片方だけ更新するようなクエリをどう書くか悩む前に、自分ならさっさと人工キーを用意しちゃうと思いますが…。
引用返信 編集キー/
■38897 / inTopicNo.12)  Re[4]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ sol (18回)-(2009/07/27(Mon) 13:07:13)
2009/08/06(Thu) 00:13:32 編集(投稿者)
2009/08/06(Thu) 00:07:47 編集(投稿者)
2009/07/27(Mon) 21:14:22 編集(投稿者)

No38896 (みきぬ さん) に返信
> ■No38892 (sol さん) に返信
>>商品区分に対する商品など1:Nの関係にある時、同じデータ(レコード)が出来る可能性があると思いまして
>>実際Accessでは普通(Errもでず)に登録できたので
>>
> Access ではできますね。
> おそらく内部でレコードを一意に特定できるような情報(OracleでいうところのROW_IDみたいなの)を持っていて、それを使ってるんでしょうね。
>
> SQLServer にはそれがないか、あっても外からは扱えないんでしょうね。
> Visual Studio のクエリデザイナを使った経験からの推測ですが、主キーがついている場合には主キーを使い、そうでない場合は全カラムの変更前の値を使ってレコードを特定しようとするんじゃないかな。
>
>>もしかしてSqlServerはAccessと違い、Key(一意名)項目が必須と言うことでしょうか
>>読み取り専用は困りますー^^;
>
> SQL Server Management Studio Express のテーブル表示を使った手入力ができないってだけで、UPDATEクエリを書けば更新はできますよ。だから必須とまでは思いません。
> もっとも、同一データの片方だけ更新するようなクエリをどう書くか悩む前に、自分ならさっさと人工キーを用意しちゃうと思いますが…。

なるほどテストなんで
自動付番Noで対処しとこうかな!
引用返信 編集キー/
■39343 / inTopicNo.13)  Re[5]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ sol (22回)-(2009/08/06(Thu) 00:13:02)
2009/08/06(Thu) 00:49:10 編集(投稿者)
No38897 (sol さん) に返信
> 2009/08/06(Thu) 00:07:47 編集(投稿者)
> 2009/07/27(Mon) 21:14:22 編集(投稿者)
>
> ■No38896 (みきぬ さん) に返信
>>■No38892 (sol さん) に返信
> >>商品区分に対する商品など1:Nの関係にある時、同じデータ(レコード)が出来る可能性があると思いまして
> >>実際Accessでは普通(Errもでず)に登録できたので
> >>
>>Access ではできますね。
>>おそらく内部でレコードを一意に特定できるような情報(OracleでいうところのROW_IDみたいなの)を持っていて、それを使ってるんでしょうね。
>>
>>SQLServer にはそれがないか、あっても外からは扱えないんでしょうね。
>>Visual Studio のクエリデザイナを使った経験からの推測ですが、主キーがついている場合には主キーを使い、そうでない場合は全カラムの変更前の値を使ってレコードを特定しようとするんじゃないかな。
>>
> >>もしかしてSqlServerはAccessと違い、Key(一意名)項目が必須と言うことでしょうか
> >>読み取り専用は困りますー^^;
>>
>>SQL Server Management Studio Express のテーブル表示を使った手入力ができないってだけで、UPDATEクエリを書けば更新はできますよ。だから必須とまでは思いません。
>>もっとも、同一データの片方だけ更新するようなクエリをどう書くか悩む前に、自分ならさっさと人工キーを用意しちゃうと思いますが…。
>
> なるほどテストなんで
> 自動付番Noで対処しとこうかな!ということで一旦は閉じたのですが継続して質問です
>
>
フィールド名 f1 f2 f3 と作成し颯爽とf3をint型IDENTITY(自動付番)1から1づつ加算で作成したのですが、
f1 に「1」を入力 行移動(f3 に「1」が入る)
f1 に「1」を入力 行移動で又同じように「この行は正常に・・・・」の警告がでるのですが、
SQL Serverのデータは必ず(?)入れるデータをバラバラに入れないといけないのでしょうか?

+自己レスです
C#でデータグリッドを作りupdateすると問題無く登録できるようです(警告でなかった)
引用返信 編集キー/
■39346 / inTopicNo.14)  Re[6]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ みきぬ (585回)-(2009/08/06(Thu) 09:30:45)
2009/08/06(Thu) 09:32:01 編集(投稿者)

No39343 (sol さん) に返信
> フィールド名 f1 f2 f3 と作成し颯爽とf3をint型IDENTITY(自動付番)1から1づつ加算で作成したのですが、
> f1 に「1」を入力 行移動(f3 に「1」が入る)
> f1 に「1」を入力 行移動で又同じように「この行は正常に・・・・」の警告がでるのですが、

ちょっくら触ってみたけど、再取得のときには入力した値だけを使ってデータを取りに行くみたいね。
上の例の場合、f1 と f2 に入力した値だけを使って(登録と)再取得を行うのでそうなるみたい。
IDENTITY 列を主キーにしてもしなくても、この動きは変わらなかった。

※SQL Server 2005 Developer Edition 付属の Management Studio と SQL Server Profiler にて確認


> SQL Serverのデータは必ず(?)入れるデータをバラバラに入れないといけないのでしょうか?

警告の通り、再取得すれば?
引用返信 編集キー/
■39968 / inTopicNo.15)  Re[7]: コミット後にデータを再取得中に問題が発生SqlServer
□投稿者/ sol (23回)-(2009/08/18(Tue) 21:40:44)
2009/08/18(Tue) 21:41:08 編集(投稿者)
No39346 (みきぬ さん) に返信
> 2009/08/06(Thu) 09:32:01 編集(投稿者)
>
> ■No39343 (sol さん) に返信
>>フィールド名 f1 f2 f3 と作成し颯爽とf3をint型IDENTITY(自動付番)1から1づつ加算で作成したのですが、
>>f1 に「1」を入力 行移動(f3 に「1」が入る)
>>f1 に「1」を入力 行移動で又同じように「この行は正常に・・・・」の警告がでるのですが、
>
> ちょっくら触ってみたけど、再取得のときには入力した値だけを使ってデータを取りに行くみたいね。
> 上の例の場合、f1 と f2 に入力した値だけを使って(登録と)再取得を行うのでそうなるみたい。
> IDENTITY 列を主キーにしてもしなくても、この動きは変わらなかった。
>
> ※SQL Server 2005 Developer Edition 付属の Management Studio と SQL Server Profiler にて確認
>
>
>>SQL Serverのデータは必ず(?)入れるデータをバラバラに入れないといけないのでしょうか?
>
> 警告の通り、再取得すれば?

C#でデータグリッドを作りupdateすると問題無く登録できるようなのでこれで良しと、いたしとうございます
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -