4

在 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
)
*/

等等等等……这是脚本中唯一包含注释的部分,错误发生在本节中。报告的错误:

消息 113,级别 15,状态 1,服务器 UBHNT126,第 4 行
缺少结束注释标记“*/”。

消息 102,级别 15,状态 1,服务器 UBHNT126,第 24 行
'*' 附近的语法不正确。

标题块中没有go语句 - 在这种情况下我通常会寻找除“GO”之外的任何其他语句是否会导致相同的错误?

这不会发生在 2005 年,只有 2008 年。我不太担心这种特殊情况,因为我可以删除评论,但我们正在将整个系统移植到 2008 年,我想修复对于可能再次发生的其他情况。

ALSO - 仅当我在服务器上调用脚本(从作业中的 cmdexec)时才会发生这种情况,而不是在 ssms 中运行脚本时(无论是 2008 年还是 2005 年)

存储过程创建语句:

    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"
4

3 回答 3

7

我在 SQL 2012 中遇到了类似的问题。我在结束注释 */ 之前有 GO 语句。在 */ 之前的评论中删除 GO 语句解决了问题。

于 2014-07-10T06:51:21.340 回答
4

在 OSQL 的 2000 版本中,ED曾经是一个命令,在某些情况下,系统会忽略命令前的前导空格 - 所以请尝试确保第 4 行的第一个非空格字符不是ED,看看是否可以解决它

对于20052008,文档说:

osql 不再支持!!and命令。ED

但是,即使未处理命令,仍然可能会识别命令,并且行为上的差异纯粹是当命令前面有前导空格时是否可以识别命令之一。显然,2008 年是这样,但 2005 年不是这样。

于 2013-04-04T13:35:09.780 回答
0

我的猜测是你的问题在于pr_printdate过程/功能。

您可能也想检查和/或发布该内容;)

于 2013-04-04T12:16:05.587 回答