目的:想在表TTest存在时打印错误信息然后退出。
问题:如果数据库中表TTest存在,执行该脚本会打印'error:TTest exist’,但是还是会执行return后面的语句。如果将return改成quit,print语句又打印不出来。以下内容存为xxx.sql文本,利用sqlcmd命令行执行if exists (SELECT * FROM dbo.sysobjects where id = object_id(N'TTest') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
print 'error: TTest exist'
return
end--以下内容希望在存在表时不执行SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TTest](
[Id] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PK_TTest] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)
GO

解决方案 »

  1.   

    return ;或者goto到一个标签。
      

  2.   

    那是因为你下面打了几个go
    一个go代表一个段批处理结束,就相当于两个查询窗口,下面的与上面的互不影响
    还要就是,一般if exists 然后可以用else接后续的操作,这样也不会执行
      

  3.   

    有没有办法让go后面的不执行,但是在不删除go的前提下
      

  4.   

    或者我在print后执行一个quit,但是这样print的信息不会打印出来,如何让它打印出来
      

  5.   

    不去掉go是没办法的,就像我刚才的举例,就如你打开了两个查询窗口
    你在窗口A中想停止窗口B中的操作停止是不可能的
      

  6.   

    如下存成脚本,用sqlcmd执行,在cmd窗口不会打印‘xxxx',为什么?有没其他办法exit前打印出来。
    print 'xxxx'
    exit