儲存過程中的關鍵字--AS、GO的含義
在個人學習編寫SQL Server儲存過程中,對於儲存過程中的關鍵字As、Go關鍵字不懂,在網上查看了很多資料。在這裡,我個人稍作總結一下.
========================As、Go說法一=======================
GO 用於在 SSMS 和 SQLCMD 中將其之前的 T-SQL 語句作為一個批處理提交給 SQL Server 例項。GO 不是 T-SQL 語句,只是由這些特定客戶端指定的提交批處理的方式。批處理(Batch)是 SQL SERVER 客戶端作為一個單元傳送給服務的一個或多個 T-SQL 語句的集合-客戶端將此集合一次性的提交給例項,而服務會將其編譯為一個執行計劃。
啟用 QUOTED_IDENTIFIER 表示使用雙引號( "")作為分隔符(當標示符不符合 SQL SERVER 的命名規則時可以使用 "" 或 [] 作為分隔符)。
AS 其實是關鍵字,在儲存過程中可以理解為將其下(到 GO)的 T-SQL 語句,定義為儲存過程。
========================As、Go說法二=======================
GO 不是 Transact-SQL語句;它是可由 sqlcmd 和 osql 實用工具以及SQL Server Management Studio 程式碼編輯器識別的命令。
SQL Server 實用工具將 GO解釋為應該向SQL Server例項傳送當前批Transact-SQL語句的訊號。當前批語句由上一GO命令後輸入的所有語句組成,如果是第一條GO命令,則由即席會話或指令碼開始後輸入的所有語句組成。
GO 命令和 Transact-SQL語句不能在同一行中。但在GO命令列中可包含註釋。
AS 儲存過程語法的一部分,AS之前是儲存過程引數和屬性定義,
USE [database_name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[proc_user_test]
(
-- 設定引數
@citizenId char(10), -- 業主id
@goodsId char(12), -- 商品id
@goodsNum int, -- 商品個數
@ElectronDeviceNo varchar(20), -- 電子秤編號
@exchangeInt int, -- 兌換積分
@recycleExchangeInt int, -- 兌換回收積分
@exchangetime datetime, -- 兌換時間
@int int output -- 用於輸出的引數
)
AS
BEGIN try
-- 設定區域性變數
declare @throwExchangeInt int; -- 兌換投放積分,預設值為0,如何設定?
declare @userId char(10); -- 操作人員id
declare @primaryKey varchar(20); -- 唯一標識
begin tran
-- insert into gar_ElectronDeviceGoodsOrder(?, ?, ?, ?)
-- 插入電子秤商品兌換記錄資訊
insert into gar_ElectronDeviceGoodsOrder(citizenId, goodsId, goodsNum,
ElectronDeviceNo, exchangeInt, throwExchangeInt,
recycleExchangeInt, pickExchangeInt, userId, exchangetime)
values (@citizenId, @goodsId, goodsNum,
@ElectronDeviceNo, @exchangeInt, 0,
@recycleExchangeInt, 0, @userId, @exchangetime);
-- 在這裡,是否要獲得主鍵唯一標識?
set @primaryKey = @@IDENTITY
-- 更新業主積分變化
update gar_Citizen set intCurrency = (intCurrency - @exchangeInt),
intSpend = (intSpend + @exchangeInt),
recycleExchangeInt = (recycleExchangeInt + @recycleExchangeInt)
where citizenId = @citizenId;
end try
begin catch
set @int = Error_severity();
if(@@trancount > 0) begin
rollback tran
end
end catch
if(@@trancount > 0)
begin
commit tran
set @int = 0;
end
select @int as code -- 什麼意思?不懂
-- 以下4行程式碼是建立儲存過程時,系統自動新增的語句
-- SET NOCOUNT ON;
-- Insert statements for procedure here
-- SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
--END
GO