1. 程式人生 > >儲存過程中的關鍵字--AS、GO的含義

儲存過程中的關鍵字--AS、GO的含義

    在個人學習編寫SQL Server儲存過程中,對於儲存過程中的關鍵字As、Go關鍵字不懂,在網上查看了很多資料。在這裡,我個人稍作總結一下.

     ========================As、Go說法一=======================

        GO 用於在 SSMS  SQLCMD 中將其之前的 T-SQL 語句作為一個批處理提交給 SQL Server 例項。GO 不是 T-SQL 語句,只是由這些特定客戶端指定的提交批處理的方式。批處理(Batch)是 SQL SERVER 客戶端作為一個單元傳送給服務的一個或多個 T-SQL 語句的集合-客戶端將此集合一次性的提交給例項,而服務會將其編譯為一個執行計劃。

                     啟用 ANSI_NULLS,所有與空值的比較運算結果為 UNKNOWN;否則空值與空值的比較結果為 TRUE                 

    啟用 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之前是儲存過程引數和屬性定義,

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