2

職場には SQL Server データベースがあります。dbはよくわかりません。新しい機能のためにテーブルに新しい列を作成しました....すぐにエラーが表示されるようになりました

私の発言はこうでした。

ALTER TABLE users
ADD locked varchar(50) NULL
GO

エラーは次のとおりです。

挿入エラー: 列名または指定された値の数がテーブル定義と一致しません

INSERT 操作中に、指定された列名の数または指定された値の数がテーブル定義と一致しない場合にエラー メッセージが表示されることを読みました。

しかし、私は何度もチェックしましたが、この列のデータを含めるように PHP コードを変更しましたが、それでもエラーが発生します。

データベースで SQL クエリを直接実行しましたが、それでもエラーが発生します。

エラーを取得するクエリは更新です。

UPDATE "users"
SET "users"."date_last_login" = GETDATE()
WHERE id = 1
4

2 に答える 2

4

それが引き金になる可能性があると考えたことはありますか? 

これは、表示されるエラー メッセージです。

Update アクションが原因である場合は、そのテーブルの Update が実行するトリガー アクションを確認します。

それを行う:

#sp_helptrigger Users, 'UPDATE';

これにより、「更新」アクションで発生するトリガーが表示されます。

トリガーがある場合は、トリガー名を取得して以下を実行します (ただし、TriggerNameHere を実際のトリガーに置き換えます)。

#sp_helptext TriggerNameHere;

これにより、トリガーが実行するすべての SQL が得られ、エラー メッセージが参照している INSERT である可能性があります。

お役に立てれば

于 2013-01-19T09:22:57.107 に答える
1

以外にもTRIGGERS

その理由は、ステートメントimplicitのタイプを使用しているためです。INSERTテーブルの以前の列数が 3 であるとしましょう。次の構文のINSERTステートメントがあります。

INSERT INTO tableName VALUES ('val1','val2','val3')

通常は正常に実行されます。しかし、テーブルを変更して別の列を追加しました。すべてのINSERTクエリは、列の総数と一致しないテーブルに 3 つの値のみを挿入しています。

この問題を解決するには、すべてのINSERTステートメントを更新して、テーブルに 4 つの値を挿入する必要があります。

INSERT INTO tableName VALUES ('val1','val2','val3', 'val4')

通常は正常に動作します。

値を挿入する列を指定する必要があるEXPLICITタイプを使用することをお勧めします。INSERT例えば、

INSERT INTO tableName (col1, col2, col3) VALUES ('val1','val2','val3')

このように、列を追加してテーブルを変更した場合でも、INSERT列にデフォルト値がなく、null 非許容でない限り、ステートメントは影響を受けません。

于 2013-01-19T09:28:06.383 に答える