批处理示例 以下示例是使用 SQL 查询分析器和 osql 实用工具的 GO 命令定义批处理边界的脚本。下例创建一个视图。因为 CREATE VIEW 必须是批处理中的唯一语句,所以需要 GO 命令将 CREATE VIEW 语句与其周围的 USE 和 SELECT 语句隔离。USE pubs GO /* Signals the end of the batch */CREATE VIEW auth_titles AS SELECT * FROM authors GO /* Signals the end of the batch */SELECT * FROM auth_titles GO /* Signals the end of the batch */下例说明将几个批处理组合成一个事务。BEGIN TRANSACTION 和 COMMIT 语句分隔事务边界。BEGIN TRANSACTION、USE、CREATE TABLE、SELECT 和 COMMIT 语句都包含在它们各自的单语句批处理中。所有的 INSERT 语句包含在一个批处理中。BEGIN TRANSACTION GO USE pubs GO CREATE TABLE mycompanies ( id_num int IDENTITY(100, 5), company_name nvarchar(100) ) GO INSERT mycompanies (company_name) VALUES ('New Moon Books') INSERT mycompanies (company_name) VALUES ('Binnet & Hardley') INSERT mycompanies (company_name) VALUES ('Algodata Infosystems') INSERT mycompanies (company_name) VALUES ('Five Lakes Publishing') INSERT mycompanies (company_name) VALUES ('Ramona Publishers') INSERT mycompanies (company_name) VALUES ('GGG&G') INSERT mycompanies (company_name) VALUES ('Scootney Books') INSERT mycompanies (company_name) VALUES ('Lucerne Publishing') GO SELECT * FROM mycompanies ORDER BY company_name ASC GO COMMIT GO下列脚本说明两个问题。首先,变量 @MyVar 在第二个批处理中定义而在第三个批处理中引用。而且第二个批处理中有注释的开始但没有结尾。第三个批处理有注释的结尾,但是当 osql 读取 GO 命令时,它将第一个批处理发送到 Microsoft® SQL Server™,由于"/*"没有与之匹配的"*/"而产生语法错误。USE Northwind GO DECLARE @MyVar INT /* Start of the split comment. GO End of the split comment. */ SELECT @MyVar = 29 GO
用触发器或错误处理create trigger Trigger_Name on TableName for insert,update,delete as begin ........ endor create proc proc_Name as begin tran ......... if @@error<>0 goto error ... commit tran return error: rollbact tran
sp_trace_create
sp_trace_generateevent
sp_trace_setevent
sp_trace_setfilter
sp_trace_setstatus2.use mssqlserver profiler utility
以下示例是使用 SQL 查询分析器和 osql 实用工具的 GO 命令定义批处理边界的脚本。下例创建一个视图。因为 CREATE VIEW 必须是批处理中的唯一语句,所以需要 GO 命令将 CREATE VIEW 语句与其周围的 USE 和 SELECT 语句隔离。USE pubs
GO /* Signals the end of the batch */CREATE VIEW auth_titles
AS
SELECT *
FROM authors
GO /* Signals the end of the batch */SELECT *
FROM auth_titles
GO /* Signals the end of the batch */下例说明将几个批处理组合成一个事务。BEGIN TRANSACTION 和 COMMIT 语句分隔事务边界。BEGIN TRANSACTION、USE、CREATE TABLE、SELECT 和 COMMIT 语句都包含在它们各自的单语句批处理中。所有的 INSERT 语句包含在一个批处理中。BEGIN TRANSACTION
GO
USE pubs
GO
CREATE TABLE mycompanies
(
id_num int IDENTITY(100, 5),
company_name nvarchar(100)
)
GO
INSERT mycompanies (company_name)
VALUES ('New Moon Books')
INSERT mycompanies (company_name)
VALUES ('Binnet & Hardley')
INSERT mycompanies (company_name)
VALUES ('Algodata Infosystems')
INSERT mycompanies (company_name)
VALUES ('Five Lakes Publishing')
INSERT mycompanies (company_name)
VALUES ('Ramona Publishers')
INSERT mycompanies (company_name)
VALUES ('GGG&G')
INSERT mycompanies (company_name)
VALUES ('Scootney Books')
INSERT mycompanies (company_name)
VALUES ('Lucerne Publishing')
GO
SELECT *
FROM mycompanies
ORDER BY company_name ASC
GO
COMMIT
GO下列脚本说明两个问题。首先,变量 @MyVar 在第二个批处理中定义而在第三个批处理中引用。而且第二个批处理中有注释的开始但没有结尾。第三个批处理有注释的结尾,但是当 osql 读取 GO 命令时,它将第一个批处理发送到 Microsoft® SQL Server™,由于"/*"没有与之匹配的"*/"而产生语法错误。USE Northwind
GO
DECLARE @MyVar INT
/* Start of the split comment.
GO
End of the split comment. */
SELECT @MyVar = 29
GO
for insert,update,delete
as
begin
........
endor create proc proc_Name
as
begin tran
.........
if @@error<>0 goto error
...
commit tran
return
error:
rollbact tran