SQL Server 2005 で問題なく実行されたスクリプトが、SQL Server 2008 でエラーをスローするようになりました。
終了コメント マーク '*/' がありません。
これがスクリプトです
/********************************************************************************************************
Script: ED demographic update_new.sql
Author: ADR
Purpose: Uses tbl_patient_history in PHD to update patient demographics at time of attendance. Supersedes
ED demographic update_old.sql, which relied on the data warehouse.
*********************************************************************************************************/
USE DB1
EXEC pr_printdate 'ED Demographic Update Start'
/*
DROP TABLE temp_ae_demo_update
CREATE TABLE [dbo].[temp_ae_demo_update](
[aed_attendance_id] [varchar](20) NOT NULL,
[ae_arr_date] [datetime] NOT NULL,
[patient_id] [varchar](20) NULL,
[patient_trust_number] [varchar](20) NULL,
[birth_date] [datetime] NULL,
[marital_status] [varchar](5) NULL,
[ethnic_code] [varchar](5) NULL,
[sex] int NULL,
[nhs_number] [varchar](20) NULL,
[patient_forename] [varchar](100) NULL,
[patient_surname] [varchar](100) NULL,
[patient_add_1] [varchar](100) NULL,
[patient_add_2] [varchar](100) NULL,
[patient_add_3] [varchar](100) NULL,
[patient_add_4] [varchar](100) NULL,
[patient_postcode] [varchar](20) NULL,
[regd_gp_code] [varchar](10) NULL,
[regd_practice_code] [varchar](10) NULL,
[gp_postcode] [varchar](10) NULL,
[demo_updated] [int] NOT NULL
)
*/
etc etc... これはコメントを含むスクリプトの唯一の部分であり、このセクションでエラーが発生します。報告されたエラー:
メッセージ 113、レベル 15、状態 1、サーバー UBHNT126、行 4
終了コメント マーク '*/' がありません。メッセージ 102、レベル 15、状態 1、サーバー UBHNT126、行 24
'*' 付近の構文が正しくありません。
ヘッダー ブロックにステートメントがありませんgo
。この状況で通常検索するのは、「GO」以外のステートメントで同じエラーが発生するかどうかです。
これは 2005 年には発生せず、2008 年にのみ発生します。コメントを削除するだけでよいので、この特定のケースについてはあまり心配していませんが、システム全体を 2008 年に移植しているので、修正したいと思います。これが再発する可能性がある他のケースに備えてください。
また、これは、ssmsでスクリプトを実行した場合(2008年か2005年か)ではなく、サーバー上で(ジョブのcmdexecから)スクリプトを呼び出した場合にのみ発生します
ストアド プロシージャの作成ステートメント:
USE [PHD]
GO
/****** Object: StoredProcedure [dbo].[pr_printdate] Script Date: 04/04/2013 13:24:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER procedure [dbo].[pr_printdate] @printext char(30) as
set nocount on
select '**** ' + rtrim(@printext) + ' **** timestamp: ' + convert(char(20), getdate())
set nocount off
GO
スクリプトを呼び出すコマンド:
osql /e /n /S SERVER /U xxxxx /P xxxxx /d PHD /i "\\SERVER\phdadmin\SQL\AE Monthly\ED_Demographic_update_new.sql" /o "\\SERVER\PHDAdmin\LOG\ED_Demographic_update_new.log"