[解決済み] 期待する会話エラー Sql Server
2022-02-14 03:06:30
質問
SQL Server 2008 R2 で、監査用のトリガーを作成しようとしています。全国の異なる場所の適切なタイムゾーンを取得するために、DATEADD()関数を使用して時間を変更するIF/ELSE IFステートメントに変数を渡そうとしているのです。以下は私のコードです。
CREATE TRIGGER epic_cover_insert
ON epic_cover
AFTER INSERT
AS
BEGIN
DECLARE @facilityCode INT
SET @facilityCode = (SELECT RIGHT(order_num, 3) FROM epic_cover)
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE epic_cover
IF @facilityCode = 403 --for logan
BEGIN
SET Created_By = CASE WHEN Created_By IS NULL THEN SUSER_NAME()
WHEN APP_NAME() = 'Microsoft SQL Server Management Studio - Query' THEN SUSER_NAME()
ELSE Created_By END,
Created_On = DATEADD(HH,-1,GETDATE()
END
ELSE IF @facilityCode = 203 -- for Thermont
BEGIN
SET Created_By = CASE WHEN Created_By IS NULL THEN SUSER_NAME()
WHEN APP_NAME() = 'Microsoft SQL Server Management Studio - Query' THEN SUSER_NAME()
ELSE Created_By END,
Created_On = DATEADD(HH,1,GETDATE())
END
ELSE IF @facilityCode = 263 --for Saint Charles
BEGIN
SET Created_By = CASE WHEN Created_By IS NULL THEN SUSER_NAME()
WHEN APP_NAME() = 'Microsoft SQL Server Management Studio - Query' THEN SUSER_NAME()
ELSE Created_By END,
Created_On = GETDATE()
END
END
END
EXPECTING CONVERSATIONと書かれた様々なエラーが出ますが、これは何ですか?これが何を意味するのかよくわかりません。ググってみたけど、さらに混乱が深まったよ。
解決するには?
まず、トリガーを書くときに、一度に1つ以上のレコードが挿入、更新、または削除されることを考える必要があります。
あなたのコードを見て、私はsql serverを想定していますが、もし違うrdbmsであれば、そのことに留意してください。
次のページ
SET @facilityCode = (SELECT RIGHT(order_num, 3) FROM epic_cover)
は常に、epic_cover にすでにあるファシリティコードを与えようとしており、それはあなたが望むものではありません。
それから、あなたはIF文とupdate文を混ぜようとしていますが、これは許されません。 しかし、実際には、IF文は使用せず、case文を使用すればよいのです。
それから、挿入されたレコードだけでなく、テーブル内のすべてのレコードを更新することになります。 テーブルの主キーがない場合、あるいはどのレコードが追加されたかを知るための方法が必要です。次に、特別な
"inserted"
テーブルを使用します。
CREATE TRIGGER epic_cover_insert
ON epic_cover
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE epic_cover
SET Created_By = CASE WHEN i.Created_By IS NULL THEN SUSER_NAME()
WHEN APP_NAME() = 'Microsoft SQL Server Management Studio - Query' THEN SUSER_NAME()
ELSE i.Created_By END
,Created_On = CASE
-- right function is for strings so I assume order num is a string if not you will need to do some casting
WHEN RIGHT(i.order_num, 3) = '403' THEN DATEADD(HH,-1,GETDATE())
WHEN RIGHT(i.order_num, 3) = '203' THEN DATEADD(HH,1,GETDATE())
WHEN RIGHT(i.order_num, 3) = '263' THEN GETDATE()
ELSE NULL-- ?????
END
FROM
epic_cover e
INNER JOIN inserted i
ON e.PrimaryKey = i.PrimaryKey
END
関連
-
[解決済み] SQLクエリで2つの列から値を引き算する
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL Server 2008を使用してIDENTITY_INSERTをオン/オフする方法は?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PL/SQL SELECTに複数のCOUNT(DISTINCT xxx)を指定すると、予期しない結果になる。
-
[解決済み] 3を挿入すると「ORA-01438: この列で許容される指定精度より大きい値」と表示される。
-
[解決済み】一括読み込みデータ変換エラー(切り捨て)
-
[解決済み] 2つの列を分割するには?
-
[解決済み] SQL Server - 'RETURN'付近の、条件が想定されるコンテキストで指定された、非ブール型の式。
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] オペランド型の衝突:uniqueidentifierはintと互換性がない
-
[解決済み] MySQLのON句の不明なカラム
-
[解決済み] SQLiteでどのようにピボットするか、つまり、長い形式で保存されたテーブルを広い形式で選択するか?