① sql中什麼是局部變數,什麼是全局變數,如何標示他們
局部變數:
局部變數必須以標記@作為前綴
,如@age
局部變數的使用也是先聲明,再賦值
全局變數:
全局變數必須以標記@
@作為前綴,如@@version
全局變數由系統定義和維護,我們只能讀取,不能修改全局變數的值
② 在transat-sql語言中,定義局部變數的關鍵字是
應該是declare
DECLARE @Variable_name DataType
③ sql中declare是什麼意思
DECLARE_SERIAL,DECLARE_SERIAL / IMPLEMENT_SERIAL 宏的技術詳解(轉) DECLARE_DYNAMIC表明的是支持類型信息。
DECLARE_SERIAL / IMPLEMENT_SERIAL 宏的技術詳解(轉) DECLARE_DYNAMIC表明的是支持類型信息, 有了這個宏,我們就可以判斷一個類究竟是什麼類,比如
class A;
class B:public A;
A a;
B b;
(3)sql中聲明局部變數的關鍵字是擴展閱讀:
DECLARE_DYNCREATE是動態創建的意思,這個有點類似Com的類工廠。
它實際上是用類CRunTime class記錄了類的靜態創建函數的地址,這個特性在很多地方需要使用,就在下面說的DECLARE_SERIAL就是一個經典的例子。
動態創建主要用在 "我不知道要創建的對象就是是什麼類,但是我知道它肯定是從某個基類派生的"。
④ declare 在SQL中是什麼意思,怎麼用
變數是在批處理或過程的主體中用 DECLARE 語句聲明的,並用 SET 或 SELECT 語句賦值。游標變數可使用此語句聲明,並可用於其他與游標相關的語句。除非在聲明中提供值,否則聲明之後所有變數將初始化為 NULL。
主題鏈接圖標 Transact-SQL 語法約定
語法
DECLARE
{
{{ @local_variable [AS] data_type } | [ = value ] }
| { @cursor_variable_name CURSOR }
} [,...n]
| { @table_variable_name [AS] <table_type_definition> | <user-defined table type> }
<table_type_definition> ::=
TABLE ( { <column_definition> | <table_constraint> } [ ,... ]
)
<column_definition> ::=
column_name { scalar_data_type | AS computed_column_expression }
[ COLLATE collation_name ]
[ [ DEFAULT constant_expression ] | IDENTITY [ ( seed ,increment ) ] ]
[ ROWGUIDCOL ]
[ <column_constraint> ]
<column_constraint> ::=
{ [ NULL | NOT NULL ]
| [ PRIMARY KEY | UNIQUE ]
| CHECK ( logical_expression )
}
<table_constraint> ::=
{ { PRIMARY KEY | UNIQUE } ( column_name [ ,... ] )
| CHECK ( search_condition )
}
參數
@ local_variable
變數的名稱。變數名必須以 at 符 (@) 開頭。局部變數名稱必須符合標識符規則。
data_type
任何系統提供的公共語言運行時 (CLR) 用戶定義表類型或別名數據類型。變數的數據類型不能是 text、ntext 或 image。
有關系統數據類型的詳細信息,請參閱數據類型 (Transact-SQL)。有關 CLR 用戶定義類型或別名數據類型的詳細信息,請參閱 CREATE TYPE (Transact-SQL)。
= value
以內聯方式為變數賦值。值可以是常量或表達式,但它必須與變數聲明類型匹配,或者可隱式轉換為該類型。
@ cursor_variable_name
游標變數的名稱。游標變數名稱必須以 at 符 (@) 開頭,並符合有關標識符的規則。
CURSOR
指定變數是局部游標變數。
@ table_variable_name
table 類型的變數的名稱。變數名稱必須以 at 符 (@) 開頭,並符合有關標識符的規則。
<table_type_definition>
定義 table 數據類型。表聲明包括列定義、名稱、數據類型和約束。允許的約束類型只包括 PRIMARY KEY、UNIQUE、NULL 和 CHECK。如果類型綁定了規則或默認定義,則不能將別名數據類型用作列標量數據類型。
<table_type_definition> 是在 CREATE TABLE 中用於定義表的信息子集。其中包含了元素和主要定義。有關詳細信息,請參閱 CREATE TABLE (Transact-SQL)。
n
指示可以指定多個變數並對變數賦值的佔位符。聲明 table 變數時,table 變數必須是 DECLARE 語句中聲明的唯一變數。
column_name
表中的列的名稱。
scalar_data_type
指定列是標量數據類型。
computed_column_expression
定義計算列值的表達式。計算列由同一表中的其他列通過表達式計算而得。例如,計算列可以定義為 cost AS price * qty。表達式可以是非計算列名稱、常量、內置函數、變數,也可以是用一個或多個運算符連接的上述元素的任意組合。表達式不能為子查詢或用戶定義函數。表達式不能引用 CLR 用戶定義類型。
[ COLLATE collation_name ]
指定列的排序規則。collation_name 可以是 Windows 排序規則名稱或 SQL 排序規則名稱,並且只適用於 char、varchar、text、nchar、nvarchar 和 ntext 數據類型的列。如果未指定,則該列的排序規則是用戶定義數據類型的排序規則(如果列為用戶定義數據類型)或當前資料庫的排序規則。
有關 Windows 排序規則名稱和 SQL 排序規則名稱的詳細信息,請參閱 COLLATE (Transact-SQL)。
DEFAULT
如果在插入過程中未顯式提供值,則指定為列提供的值。DEFAULT 定義可適用於除定義為 timestamp 或帶 IDENTITY 屬性的列以外的任何列。刪除表時,將刪除 DEFAULT 定義。只有常量值(如字元串)、系統函數(如 SYSTEM_USER())或 NULL 可用作默認參數。為了與 SQL Server 的早期版本兼容,可以為 DEFAULT 分配約束名稱。
constant_expression
用作列的默認值的常量、NULL 或系統函數。
IDENTITY
指示新列是標識列。在表中添加新行時,SQL Server 將為列提供一個唯一的增量值。標識列通常與 PRIMARY KEY 約束一起用作表的唯一行標識符。可以將 IDENTITY 屬性分配給 tinyint、smallint、int、decimal(p,0) 或 numeric(p,0) 列。每個表只能創建一個標識列。不能對標識列使用綁定默認值和 DEFAULT 約束。必須同時指定種子和增量,或者都不指定。如果二者都未指定,則取默認值 (1,1)。
seed
是裝入表的第一行所使用的值。
increment
添加到以前裝載的列標識值的增量值。
ROWGUIDCOL
指示新列是行的全局唯一標識符列。對於每個表,只能將其中的一個 uniqueidentifier 列指定為 ROWGUIDCOL 列。ROWGUIDCOL 屬性只能分配給 uniqueidentifier 列。
NULL | NOT NULL
決定在列中是否允許 Null 值的關鍵字。
PRIMARY KEY
通過唯一索引對給定的一列或多列強制實現實體完整性的約束。每個表只能創建一個 PRIMARY KEY 約束。
UNIQUE
通過唯一索引為給定的一列或多列提供實體完整性的約束。一個表可以有多個 UNIQUE 約束。
CHECK
一個約束,該約束通過限制可輸入一列或多列中的可能值來強制實現域完整性。
logical_expression
返回 TRUE 或 FALSE 的邏輯表達式。
<<user-defined table type>>
指定變數是用戶定義表類型。
備注
變數常用在批處理或過程中,作為 WHILE、LOOP 或 IF...ELSE 塊的計數器。
變數只能用在表達式中,不能代替對象名或關鍵字。若要構造動態 SQL 語句,請使用 EXECUTE。
局部變數的作用域是其被聲明時所在批處理。
當前分配有游標的游標變數可在下列語句中作為源引用:
* CLOSE 語句。
* DEALLOCATE 語句。
* FETCH 語句。
* OPEN 語句。
* 定位的 DELETE 或 UPDATE 語句。
* SET CURSOR 變數語句(在右側)。
在所有上述語句中,如果存在被引用的游標變數,但是不具有當前分配給它的游標,那麼 SQL Server 將引發錯誤。如果不存在被引用的游標變數,SQL Server 將引發與其他類型的未聲明變數引發的錯誤相同的錯誤。
游標變數:
* 可以是游標類型或其他游標變數的目標。有關詳細信息,請參閱 SET @local_variable (Transact-SQL)。
* 如果當前沒有給游標變數分配游標,則可在 EXECUTE 語句中作為輸出遊標參數的目標引用。
* 應被看作是指向游標的指針。有關游標變數的詳細信息,請參閱 Transact-SQL 游標。
示例
A. 使用 DECLARE
下例將使用名為 @find 的局部變數檢索所有姓氏以 Man 開頭的聯系人信息。
復制代碼
USE AdventureWorks;
GO
DECLARE @find varchar(30);
/* Also allowed:
DECLARE @find varchar(30) = 'Man%';
*/
SET @find = 'Man%';
SELECT LastName, FirstName, Phone
FROM Person.Contact
WHERE LastName LIKE @find;
下面是結果集:
復制代碼
LastName FirstName Phone
-------------------------------------------------- -------------------------------------------------- -------------------------
Manchepalli Ajay 1 (11) 500 555-0174
Manek Parul 1 (11) 500 555-0146
Manzanares Tomas 1 (11) 500 555-0178
(3 row(s) affected)
B. 在 DECLARE 中使用兩個變數
下例將檢索北美銷售區中年銷售額至少為 $2,000,000 的 Adventure Works Cycles 銷售代表的名字。
復制代碼
USE AdventureWorks;
GO
SET NOCOUNT ON;
GO
DECLARE @Group nvarchar(50), @Sales money;
SET @Group = N'North America';
SET @Sales = 2000000;
SET NOCOUNT OFF;
SELECT FirstName, LastName, SalesYTD
FROM Sales.vSalesPerson
WHERE TerritoryGroup = @Group and SalesYTD >= @Sales;
C. 聲明一個表類型的變數
下例將創建一個 table 變數,用於儲存 UPDATE 語句的 OUTPUT 子句中指定的值。在它後面的兩個 SELECT 語句返回 @MyTableVar 中的值以及 Employee 表中更新操作的結果。請注意,INSERTED.ModifiedDate 列中的結果與 Employee 表的 ModifiedDate 列中的值不同。這是因為對 Employee 表定義了 AFTER UPDATE 觸發器,該觸發器可以將 ModifiedDate 的值更新為當前日期。不過,從 OUTPUT 返回的列將反映觸發器激發之前的數據。有關詳細信息,請參閱 OUTPUT 子句 (Transact-SQL)。
復制代碼
USE AdventureWorks;
GO
DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25
OUTPUT INSERTED.EmployeeID,
DELETED.VacationHours,
INSERTED.VacationHours,
INSERTED.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
--Note that ModifiedDate reflects the value generated by an
--AFTER UPDATE trigger.
SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO
D. 聲明一個用戶定義表類型的變數
下例將創建一個名為 @LocationTVP 的表值參數或表變數。這需要使用一個相應的名為 LocationTableType 的用戶定義表類型。有關如何創建用戶定義表類型的詳細信息,請參閱 CREATE TYPE (Transact-SQL)。有關表值參數的詳細信息,請參閱表值參數(資料庫引擎)。
復制代碼
DECLARE @LocationTVP
AS LocationTableType;
⑤ SQL server 中 關於@和declare的解釋,請看詳細
1.SQL server使用declare來聲明局部變數。
語法:DECLARE @local_variable data_type
其中,local_variable為局部變數的名稱,data_type為數據類型。
2.SQL server中的變數前面都要加@。
其中,局部變數以一個@符號開頭,全局變數以兩個@@符號開頭(如:@@ERROR)。
3.@可以看作局部變數的一個標志,是一種規定,不可以去掉的。
上圖是declare一個簡單應用的例子。
(5)sql中聲明局部變數的關鍵字是擴展閱讀:
1.用declare進行聲明的同時也可對變數賦初值,如:declare @id int = 3
2.SQL server中使用@@表示的全局變數,是系統預先定義的,我們寫的sql語句不能創建、修改這些變數的值,只能讀取。
⑥ sql怎麼聲明變數
聲明局部變數語法:DECLARE @variable_name DataType其中 variable_name為局部變數的名稱,DataType為數據類型。
給局部變數賦值有兩種方法:
1、SET @variable_name=value
2、SELECT @variable_name=value
兩者的區別:SET賦值語句一般用於賦給變數一個指定的常量,SELECT賦值語句一般用於從表中查詢出數據然後賦給變數。
例如:DECLARE @count int
SET @count=123
PRINT @count
全局變數:由於全局變數是系統定義的,我們這里只做舉例。
@@ERROR 最後一個T-SQL錯誤的錯誤號
@@IDENTITY 最後一次插入的標識值
@@LANGUAGE 當前使用的語言名稱
@@MAX_CONNECTIONS 可以創建的同時連接的最大數目
@@SERVERNAME 本地伺服器的名稱
@@VERSION SQL Server的版本信息
⑦ sql怎麼聲明 變數
聲明局部變數語法:DECLARE @variable_name DataType其中 variable_name為局部變數的名稱,DataType為數據類型。
給局部變數賦值有兩種方法:
1、SET @variable_name=value
2、SELECT @variable_name=value
兩者的區別:SET賦值語句一般用於賦給變數一個指定的常量,SELECT賦值語句一般用於從表中查詢出數據然後賦給變數。
例如:DECLARE @count int
SET @count=123
PRINT @count
全局變數:由於全局變數是系統定義的,我們這里只做舉例。
@@ERROR 最後一個T-SQL錯誤的錯誤號
@@IDENTITY 最後一次插入的標識值
@@LANGUAGE 當前使用的語言名稱
@@MAX_CONNECTIONS 可以創建的同時連接的最大數目
@@SERVERNAME 本地伺服器的名稱
@@VERSION SQL Server的版本信息
⑧ 定義靜態局部變數時使用的關鍵字是什麼
1 定義靜態局部變數時使用的關鍵字是static。如:
static int a;
2 另外聲明同一項目中在本文件中使用、但在其它文件中定義的全局變數時使用的關鍵字是extern。如:
extern A; //變數A在其他文件中定義,這兒作聲明。
⑨ SQL中全局變數和局部變數的用法
局部變數是用戶可自定義的變數,它的作用范圍僅在程序內部。在程序中通常用來儲存從表中查詢到的數據,或當作程序執行過程中暫存變數使用。局部變數必須以「@」開頭,而且必須先用DECLARE命令說明後才可使用。其說明形式如下:
DECLARE@變數名變數類型[@變數名變數類型…]
其中變數類型可以是sql server(WINDOWS平台上強大的資料庫平台) 2000支持的所有數據類型,也可以是用戶自定義的數據類型。
在Transact-SQL中不能像在一般的程序語言中一樣使用「變數=變數值」來給變數賦值。必須使用SELECT或SET命令來設定變數的值,其語法如下:
SELECT@局部變數=變數值
SET@局部變數=變數值1212
例:聲明一個長度為10 個字元的變數「id」並賦值
declare@idchar(10)
select@id=『10010001』1212
注意:可以在Select命令查詢數據時,在Select命令中直接將列值賦給變數。
例:查詢編號為「10010001」的員工和工資,將其分別賦予變數name和wage
usepangu
declare@namechar(30)@wagemoney
select@name=e_name,@wage=e_wage
fromemployee
whereemp_id='10010001'
select@namease_name,@wagease_wage123456123456
運行結果如下:
e_namee_wage
-----------------------------------------
張三8000.0000123123
注意:資料庫語言和編程語言有一些關鍵字,關鍵字是在某一一樣下能夠促使某一操作發生的字元組合,為避免沖突和產生錯誤,在命令表、列、變數以及其它對象時應避免使用關鍵字。
全局變數
全局變數是sql server(WINDOWS平台上強大的資料庫平台)系統內部使用的變數,其作用范圍並不局限於某一程序,而是任何程序均可隨時調用全局變數通常存儲一些sql server(WINDOWS平台上強大的資料庫平台)的配置設定值和效能統計數據。用戶可在程序中用全局變數來測試系統的設定值或Transact-SQL命令執行後的狀態值。有關sql server(WINDOWS平台上強大的資料庫平台) 全局變數的詳細情況請參見附錄。
注意:全局變數不是由用戶的程序定義的,它們是在伺服器級定應義的。只能使用預先說明及定義的變局變數。引用全局變數時,必須以「@@」開頭。局部變數的名稱不能與全局變數的名稱相同、否則會在應用中出錯。