在個人學習編寫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]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- 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 -- 用於輸出的參數)ASBEGIN try-- 設定局部變數declare @throwExchangeInt int; -- 兌換投放積分,預設值為0,如何設定。declare @userId char(10); -- 操作人員iddeclare @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 catchset @int = Error_severity();if(@@trancount > 0) beginrollback tranendend catch if(@@trancount > 0)begincommit tran set @int = 0;endselect @int as code -- 什麼意思。不懂-- 以下4行代碼是建立預存程序時,系統自動添加的語句-- SET NOCOUNT ON; -- Insert statements for procedure here-- SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>--ENDGO