2014-04-06 36 views
0

我有一個關於SQL Server中局部變量的問題。當我聲明局部變量時,我從一個DECLARE語句開始,然後創建我的變量。那我可以開始輸入其他語句嗎?在我做其他事之前,我是否需要像BEGIN聲明一樣的東西?在SQL Server 2012中聲明局部變量

例如是這樣的樣本編碼可以接受的:

DECLARE 
    @stock INT, 
    @customername 

select @stock = ... 
select @customername ... 

我可以按照這個與任何其他說法?我是否必須將聲明部分與其他編碼分開?

+0

謝謝大家的回答! – user3109653

+0

我想給你所有的支票,但是我不能... – user3109653

回答

0

不,這只是你編碼風格的問題。您可以自由地將DECLARE與其他代碼混合使用。只要確保在使用它之前聲明該變量,而不是在同一批次內聲明它兩次。 未初始化的變量通常爲NULL。 是可能的聲明,並在一個語句中初始化變量:

DECLARE @stock INT = 123; 

BTW,有SELECT @stock = ...和SET @stock之間的差異= ...

0

是的,你可以。

BEGIN用於特殊操作的代碼塊部分。 BEGIN可用於創建事務查詢。例如:

BEGIN TRAN 
Update MyTable SET X = 1 WHERE Y='4' 
ROLLBACK TRAN -- Didn't like what I did, undo it 

直到你ROLLBACK或COMMIT你的事務你在塊中查詢的所有表都處於陷阱狀態。直到你釋放你的代碼,你的服務器才能做很多事情。

+0

在交易完成之前要小心[SET XACT_ABORT ON](http://technet.microsoft.com/zh-cn/library/ms188792 .aspx),[@@ TRANCOUNT](http://technet.microsoft.com/en-us/library/ms187967.aspx)和[SQL Server DBA神話一天:(26/30)嵌套事務是真實的](http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real/) –

1

你不必須分開這個。
但是你寫的聲明是錯誤的應該是:

DECLARE @stock INT; 
DECLARE @customername NVARCHAR(11); 

所有變量都必須鍵入。

不同之處在於,如果您選擇返回多於一行的語句,那麼:
set @var = (select value from table)會引發錯誤。
select @var = value from table將從所選的最後一行分配給@var值。