質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

2回答

5359閲覧

sql server 一時テーブルにインサートが出来ない

KINGFROG

総合スコア27

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2016/10/02 14:20

編集2016/10/03 07:44

プロシージャを作成するさいにまずは、連携一時テーブルから、有効データを抽出して、プログラム内部のみ使用一時テーブル(#tTmp_IF_TMP)に格納し、対象のデータが1件も存在しない場合は、終了ログを出力し、処理を終了する処理を実行したいのですが、「'where'付近で不適切な構文があります。」とエラー文が出てしまい、上手くいきません。
どこか悪いかご教授頂ければと思います。

CREATE PROCEDURE [dbo].[sp_141_600]
@pMst_Handling_Company_Id INT

AS
SET NOCOUNT ON;

DECLARE @ErrMessage VARCHAR(1000)
, @iParm_Check INT
, @iIs_TrnStart INT
, @dUpdate_Date DATETIME
, @vUpdate_User_Id VARCHAR(40)
, @vUpdate_Prg_Id VARCHAR(20)
, @dTaisyo_Date DATETIME
-- 入力データチェック用
, @curInput CURSOR
, @I_LOGI_ONETMCSTM_CD VARCHAR(10)
, @I_ONETMCSTM_CD VARCHAR(10)
-- 重複チェック用
, @curDuplicate1 CURSOR
, @curDuplicate2 CURSOR
;

-- 対象データ保持テーブル
CREATE TABLE #tTmp_MARSIF_TMP
(
LOGI_ONETMCSTM_CD VARCHAR(30) COLLATE Japanese_CI_AI_KS_WS
, ONETMCSTM_CD VARCHAR(30) COLLATE Japanese_CI_AI_KS_WS
, BUKRS VARCHAR(12) COLLATE Japanese_CI_AI_KS_WS
, VKORG VARCHAR(12) COLLATE Japanese_CI_AI_KS_WS
, LOGI_CHANEL_CD VARCHAR(6) COLLATE Japanese_CI_AI_KS_WS
, SPART VARCHAR(6) COLLATE Japanese_CI_AI_KS_WS
, KTOKD VARCHAR(12) COLLATE Japanese_CI_AI_KS_WS
, KANA_NM VARCHAR(600) COLLATE Japanese_CI_AI_KS_WS
, SHORT_NM VARCHAR(120) COLLATE Japanese_CI_AI_KS_WS
, POST_CD_SAP VARCHAR(30) COLLATE Japanese_CI_AI_KS_WS
, COUNTRY VARCHAR(6) COLLATE Japanese_CI_AI_KS_WS
, TEL VARCHAR(45) COLLATE Japanese_CI_AI_KS_WS
, FAX VARCHAR(45) COLLATE Japanese_CI_AI_KS_WS
, WAERS VARCHAR(60) COLLATE Japanese_CI_AI_KS_WS
, KALKS VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS
, VERSG VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS
, KVGR1 VARCHAR(9) COLLATE Japanese_CI_AI_KS_WS
, LPRIO VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS
, BULK_SHIP_CFC VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS
, KVGR2 VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS
, CHKDEGT_ONETMCSTM_CD VARCHAR(33) COLLATE Japanese_CI_AI_KS_WS
, AREA_CD VARCHAR(10) COLLATE Japanese_CI_AI_KS_WS
);

-- 開始ログ出力 EXEC sc_090_000 '0','sp_141_600(受注先マスタ登録)','START' -- 0.初期値セット SET @iParm_Check = 0; SET @iIs_TrnStart = 0; SET @dUpdate_Date = GETDATE(); SET @vUpdate_User_Id = 'SYSTEM'; SET @vUpdate_Prg_Id = 'sp_141_600'; SET @dTaisyo_Date = dbo.Fnc_GET_ONLINE_DATE(@dUpdate_Date, 0); -- 0.1.パラメータチェック -- 会社ID IF (@pMst_Handling_Company_Id IS NULL) BEGIN SET @ErrMessage = '受注先マスタ登録処理で、パラメータが正しく指定されませんでした。確認してください。' EXEC sc_090_000 '-1','sp_141_600(受注先マスタ登録)',@ErrMessage --エラーログ出力 RETURN -1 -- システムエラー END -- 1.対象データ取得 INSERT INTO #tTmp_MARSIF_TMP SELECT LTRIM(RTRIM(CONVERT(VARCHAR(10),ISNULL(MST.LOGI_ONETMCSTM_CD,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(12),ISNULL(MST.ONETMCSTM_CD,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.BUKRS,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.VKORG,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(2),ISNULL(MST.LOGI_CHANEL_CD,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(2),ISNULL(MST.SPART,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.KTOKD,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(20),ISNULL(MST.KANA_NM,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(70),ISNULL(MST.SHORT_NM,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(10),ISNULL(MST.POST_CD_SAP,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(3),ISNULL(MST.COUNTRY,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(16),ISNULL(MST.TEL,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(31),ISNULL(MST.FAX,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(5),ISNULL(MST.WAERS,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(1),ISNULL(MST.KALKS,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(1),ISNULL(MST.VERSG,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(3),ISNULL(MST.KVGR1,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(2),ISNULL(MST.LPRIO,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(1),ISNULL(MST.BULK_SHIP_CFC,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(3),ISNULL(MST.KVGR2,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(12),ISNULL(MST.CHKDEGT_ONETMCSTM_CD,'')))) , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.AREA_CD,'')))) FROM dbo.MARSIF_TMP_ONETMCSTM_MST AS MST WHERE CONVERT(DATETIME, MST.EFFECTIVE_DT_FROM) <= @dTaisyo_Date AND CONVERT(DATETIME, MST.EFFECTIVE_DT_TO) > @dTaisyo_Date AND ( @pMst_Handling_Company_Id = 1 AND MST.COMPANY_CFC IN ('1', '4') ) if (@@ROWCOUNT < 1) BEGIN --正常完了ログ出力 EXEC sc_090_000 '0','sp_141_600(取込対象ファイルなし)','SUCCESS' RETURN 0 -- 正常終了 END

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2016/10/03 00:40

「うまく行かない」というところを詳細にお願いしまし。SELECT出来ているのに、INSERTできないのか、そもそもSELECTできていないのか、INSERTできているのに件数が正しく取れないのか、INSERTできているのにログが取れないのか、そもそもどこかでエラーが起きているのか。
A.Ichi

2016/10/03 01:53

SQLServerは良く分かりませんが、連携一時テーブル=MSTと言う事でしょうか?(SELECTにFROM指定が無いので)
guest

回答2

0

FROMがないですね。

FROM *** AS MST

投稿2016/10/03 03:11

koutan1976

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KINGFROG

2016/10/03 04:52 編集

ありがとうございます。 FROMをつけることで、エラー文は消えましたが、新たに「列名 ’BULK_SHIP_CFC’が無効です」というエラー文が出てしまいました。
koutan1976

2016/10/03 04:54

MST.BULK_SHIP_CFC が本当にあるのか確認してみてください。 スペルとか間違えていませんか?
KINGFROG

2016/10/03 05:17

お騒がせしました。 koutan1976さんの仰るとうり、BULK_SHIP_CFCが存在しておりませんでした。 BULK_SHIP_CFCを追加した後に実行したところ上手く処理されました。 ありがとうございました。
guest

0

ベストアンサー

LTRIMしているところ、閉じ括弧が4個必要そうですが、3個しかないところいくつかありますね。

投稿2016/10/03 02:25

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KINGFROG

2016/10/03 02:59 編集

ありがとうございます。 閉じ括弧を3個から4個に変更しましたら、先程のエラー文はでなくなりました。 ただ新たに、「マルチパート識別子”MST.EFFECTIVE_DT_FROM”をバインドできませんでした。」というエラー文が「MST.]がついている箇所全部に出てきてしまいました。
ttyp03

2016/10/03 03:47

肝心のところ見逃してました。 FROM句もないですね。 FROM テーブル名 MST
KINGFROG

2016/10/03 04:51 編集

ありがとうございます。 FROMをつけることで、エラー文は消えましたが、新たに「列名’BULK_SHIP_CFC’が無効です」というエラー文が出てしまいました。 あと、「FROM テーブル名 MST」ではエラーのままなので、「FROM テーブル名 AS MST」にするとエラーが消えました。
ttyp03

2016/10/03 05:09

失礼しました。 FROM句のASは省略できないようですね。 これで問題は解決ですか?
KINGFROG

2016/10/03 07:48

ありがとうございます。 プロシージャとしては登録できましたが、処理をバッチファイルで実行させようとすると、「"dbo"、ユーザー定義関数、あたは集計"dbo.Fnc_GET_ONLINE_DATE"がみつかりません。または、名前があいまいです。」とエラー文が出てしまいます。 やはりどこか間違えているのでしょうか?
ttyp03

2016/10/03 07:51

エラーメッセージ通り Fnc_GET_ONLINE_DATE 関数がないんじゃないでしょうか。 Management Studio から登録されている関数が確認できるので、Fnc_GET_ONLINE_DATE関数が登録されているか確認してみてください。
KINGFROG

2016/10/03 12:51

ttyp03さんの仰る通り関数がありませんでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問