SQL Server Express:テーブルの更新ができない

最近新規で導入したデータベースのお話

当初顧客がExcelで作成されていたデータベースっぽいものを

フロントエンドをAccess、バックエンドをSQL Server Expressでデータベース化して納品した

顧客もAccessなら多少触れるらしく、納品後は顧客側で項目の追加などの仕様変更を行ってたらしい

が、今日いつものようにデータベースの更新を行ったところ、メインのデータ更新時に

他のユーザーが同じデータに対して同時に変更を試みているので、プロセスが停止しました。

上記エラーが発生し更新ができなくなったらしい

以下確認内容および対処内容

とりあえず今日行った更新内容を確認

曰く「nvarchar型のフィールド1つ」と「bit型のフィールド2つ」をSQL Server Expressで追加し

Access側でそれを更新する処理を追加したらしい

確認してみるとAccess側でリンクテーブルを編集すると上記エラーが発生し

(新規追加では発生しない、更新・削除時のみ)

SQL文を使用して更新すると発生しない…

これは主キーの設定がされてないんじゃない?と思ったが、ちゃんと重複のないフィールドが主キーに設定されていた

じゃあ今日の更新分をロールバックだ、と本日追加された3フィールドを削除して再確認…更新可能になりました

それなら1個づつフィールドを追加して確認だ!と思ったところ、bit型フィールドを追加するとエラーになることが分かりました

その後AccessテーブルとSQLテーブルを比べっこすること30分余り

Accessではbit型(YesNo型)フィールドに「0」が初期値で入力されているが、SQLでは「NULL」になっている…

これが原因かな?とAccess側からSQL文を使用して上記bit型フィールド2つのすべてに「0」を上書き

結果Accessから更新できるようになりました

SQL上、bit型には「0」か「1」しか存在できないのに「NULL」が存在したことが原因のようです

(SQL Expressから参照すると「True」と「False」だけど)

だったらSQLでフィールド追加時に標準で「NULL」を放り込むようなマネはやめて頂きたい…

ところでAccessでいうYesNo型はSQLでいうbit型で合っているのかいまだに疑問です

Access2012で削除されてしまったアップサイジングを使用するとbit型になるので今まで考えないようにしてましたが

どうみてもAccess側では「0」と「-1」なんですよね…

「SQL Server Express:テーブルの更新ができない」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です