关于执行较长的SQL语句的问题?(50分)

  • 主题发起人 主题发起人 gtln
  • 开始时间 开始时间
G

gtln

Unregistered / Unconfirmed
GUEST, unregistred user!
我要执行以下SQL语句,用的是ADOCommand,提示不能完成,请教好的方法

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Report01]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[Report01]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Report02]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[Report02]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE VIEW dbo.Report01
AS
SELECT DepID, DepCode, DepName, ISNULL(Depbudget, 0) AS Depbudget, ISNULL
((SELECT SUM(Exe01) AS Exe01
FROM ItemExe
WHERE DepID = dbo.DepInf.DepID), 0) AS Exe01, ISNULL
((SELECT SUM(Exe02) AS Exe01
FROM ItemExe
WHERE DepID = dbo.DepInf.DepID), 0) AS Exe02, ISNULL
((SELECT SUM(Exe03) AS Exe01
FROM ItemExe
WHERE DepID = dbo.DepInf.DepID), 0) AS Exe03,
ISNULL(Depbudget - ISNULL
((SELECT SUM(Exe01) AS Exe01
FROM ItemExe
WHERE DepID = dbo.DepInf.DepID), 0), 0) AS Exe04, ISNULL
((SELECT SUM(Exe02) AS Exe01
FROM ItemExe
WHERE DepID = dbo.DepInf.DepID), 0) + ISNULL
((SELECT SUM(Exe03) AS Exe01
FROM ItemExe
WHERE DepID = dbo.DepInf.DepID), 0) AS Exe05
FROM dbo.DepInf

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE VIEW dbo.Report02
AS
SELECT TOP 100 PERCENT DepId, ItemName, ISNULL(ItemBudget, 0) AS ItemBudget,
AccId, ISNULL
((SELECT SUM(Exe01) AS Exe01
FROM ItemExe
WHERE ItemID = ItemBudget.ItemID), 0) AS Exe01, ISNULL
((SELECT SUM(Exe02) AS Exe01
FROM ItemExe
WHERE ItemID = ItemBudget.ItemID), 0) AS Exe02, ISNULL
((SELECT SUM(Exe03) AS Exe01
FROM ItemExe
WHERE ItemID = ItemBudget.ItemID), 0) AS Exe03,
(SELECT DepName
FROM DepInf
WHERE DepId = ItemBudget.DepId) AS DepName,
(SELECT AccName
FROM AccInf
WHERE AccId = ItemBudget.AccId) AS AccName,
ISNULL(ItemBudget - ISNULL
((SELECT SUM(Exe01)
FROM ItemExe
WHERE ItemID = ItemBudget.ItemID), 0), 0) AS Exe04, ISNULL
((SELECT SUM(Exe02) AS Exe01
FROM ItemExe
WHERE ItemID = ItemBudget.ItemID), 0) + ISNULL
((SELECT SUM(Exe03) AS Exe01
FROM ItemExe
WHERE ItemID = ItemBudget.ItemID), 0) AS Exe05
FROM dbo.ItemBudget
ORDER BY DepName

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
 
把GO 去了试试
 
SQL属性不支持go
这种情况写成存储过程就OK了
 
建议楼主使用存储过程。
 
创建视图不能放在存储过程里面吧,

楼主的语句不要用那么多子查询,会多次扫描的。
在sqlserver里面用case就可以了。
 
go去掉还是不能通过

我的目的是要在程序运行中建立两个视图
 
报什么错啊? 分开两段好了
 
把这些SQL放到一个TStringList里,再一行行判断是不是就GO,如果不是GO就先把前面的SQL放到一个临时变量里保存,是GO了就执行临时变量里的SQL,直到完成就行
 
建议你使用存储过程
 
am2001
的方法应该可行,但是比较麻烦,有没有更简单快捷的方法
 
后退
顶部