下面的语句为什么有错误,应该怎样写才对

zhlmxh 2008-04-01 12:20:05
我要往一个表中插入一条数据,语句如下:
INSERT INTO [DT_SQLDataList]([FOper], [FTableFrom], [FTableTo],
[FWhereSql], [FTime], [FSQL], [FIsGen], [FToUserNo], [FSqlType], [FBusTypeID],
[FWhereSQLA], [FItemType])
VALUES (1, N'*', N'*', NULL, NULL, N'if exists (select * from
dbo.sysobjects where id = object_id(N''[dbo].[DT_Log_Insert]'') and OBJECTPROPERTY(id, N''IsTrigger'') = 1)
drop trigger [dbo].[DT_Log_Insert]
GO
CREATE TRIGGER [DT_Log_Insert] ON [dbo].[DT_Log]
FOR INSERT
AS

SET NOCOUNT ON

Declare @intRecNo Int
Declare @intMaxID Int

Select @intRecNo = Count(FID) From Dt_Log

if @intRecNo > 3000
Begin
SELECT @intMaxID = Max(FID) From Dt_Log
DELETE FROM Dt_Log Where FID < (@intMaxID - 3000)
End

SET NOCOUNT OFF

GO', 1, N'-1', 1, 0, NULL, NULL)

此语句在查询分析器中执行为什么老提示如下错误:
服务器: 消息 105,级别 15,状态 1,行 4
字符串 'if exists (select * from
dbo.sysobjects where id = object_id(N'[dbo].[DT_Log_Insert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[DT_Log_Insert]
' 之前有未闭合的引号。
服务器: 消息 170,级别 15,状态 1,行 4
第 4 行: 'if exists (select * from
dbo.sysobjects where id = object_id(N'[dbo].[DT_Log_Insert]') and OBJECTPROPERTY(id, N'IsTrigger') = ' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,过程 DT_Log_Insert,行 20
第 20 行: 'GO' 附近有语法错误。
服务器: 消息 105,级别 15,状态 1,过程 DT_Log_Insert,行 20
字符串 ', 1, 0, NULL, NULL)
' 之前有未闭合的引号。

数据表中[FSQL]字段是text类型,是不是与这个有关系。
望高手指点一下!

...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2008-04-02
  • 打赏
  • 举报
回复

--试试不换行go
INSERT INTO [DT_SQLDataList]([FOper], [FTableFrom], [FTableTo],
[FWhereSql], [FTime], [FSQL], [FIsGen], [FToUserNo], [FSqlType], [FBusTypeID],
[FWhereSQLA], [FItemType])
VALUES (1, N'*', N'*', NULL, NULL, N'if exists (select * from
dbo.sysobjects where id = object_id(N''[dbo].[DT_Log_Insert]'') and OBJECTPROPERTY(id, N''IsTrigger'') = 1)
drop trigger [dbo].[DT_Log_Insert] GO
CREATE TRIGGER [DT_Log_Insert] ON [dbo].[DT_Log]
FOR INSERT
AS

SET NOCOUNT ON

Declare @intRecNo Int
Declare @intMaxID Int

Select @intRecNo = Count(FID) From Dt_Log

if @intRecNo > 3000
Begin
SELECT @intMaxID = Max(FID) From Dt_Log
DELETE FROM Dt_Log Where FID < (@intMaxID - 3000)
End

SET NOCOUNT OFF GO', 1, N'-1', 1, 0, NULL, NULL)
-狙击手- 2008-04-02
  • 打赏
  • 举报
回复
SET NOCOUNT OFF GO

这个要go做什么呀,不go行不行
zhlmxh 2008-04-02
  • 打赏
  • 举报
回复
大家快来看看吧!!!
-狙击手- 2008-04-01
  • 打赏
  • 举报
回复
create table dt_sqldatalist
([FOper] int,[FTableFrom] varchar(10), [FTableTo] varchar(10),
[FWhereSql] varchar(10), [FTime] datetime, [FSQL] text, [FIsGen] int,
[FToUserNo] int , [FSqlType] int, [FBusTypeID] int,
[FWhereSQLA] int, [FItemType] int)
go


INSERT INTO [DT_SQLDataList]([FOper], [FTableFrom], [FTableTo],
[FWhereSql], [FTime], [FSQL], [FIsGen], [FToUserNo], [FSqlType], [FBusTypeID],
[FWhereSQLA], [FItemType])
VALUES (1, N'*', N'*', NULL, NULL, N'if exists (select * from
dbo.sysobjects where id = object_id(N''[dbo].[DT_Log_Insert]'')
and OBJECTPROPERTY(id, N''IsTrigger'') = 1)
drop trigger [dbo].[DT_Log_Insert] go
CREATE TRIGGER [DT_Log_Insert] ON [dbo].[DT_Log]
FOR INSERT
AS

SET NOCOUNT ON

Declare @intRecNo Int
Declare @intMaxID Int

Select @intRecNo = Count(FID) From Dt_Log

if @intRecNo > 3000
Begin
SELECT @intMaxID = Max(FID) From Dt_Log
DELETE FROM Dt_Log Where FID < (@intMaxID - 3000)
End

SET NOCOUNT OFF GO'
, 1, N'-1', 1, 0, NULL, NULL)

drop table DT_SQLDataList


-狙击手- 2008-04-01
  • 打赏
  • 举报
回复
有两个GO
zhlmxh 2008-04-01
  • 打赏
  • 举报
回复
我试了,插入是可以了。但又出来一个问题,我往FSQL字段中插入的是SQL语句,在程序中可以调出来执行,可把
“drop trigger [dbo].[DT_Log_Insert]
GO
”改成"drop trigger [dbo].[DT_Log_Insert] go",
把“SET NOCOUNT OFF

GO“改成“SET NOCOUNT OFF GO”后,调出来语句执行就出错了,提示:
服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: 'dbo' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 3
第 3 行: 'GO' 附近有语法错误。
服务器: 消息 111,级别 15,状态 1,行 4
'CREATE TRIGGER' 必须是批查询中的第一条语句。
服务器: 消息 170,级别 15,状态 1,行 21
第 21 行: 'GO' 附近有语法错误。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧