當前位置:首頁 » 編程語言 » declaretablesql

declaretablesql

發布時間: 2023-03-01 10:11:01

A. 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;

B. 如果一個表不存在則創建一個表的SQL語句怎麼寫

<%
Dim SQL,Conn
Set Conn= Server.CreateObject("ADODB.Connection")
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("111.mdb")
Conn.Open

'上面是建立資料庫連接,並打開

'*********************************************************************************************************

SQL="CREATE TABLE 222("&_ '創建表222
"333 varchar(20),"&_ '建立字元型欄位333,大小為20
"444 int Default 0"&_ '建立數值型欄位444,默認值為0
") "
Conn.ExeCute(SQL) '執行Sql語句
%>

不要忘了把資料庫的安全改為完全控制

C. sql語句 table作為表變數如何賦值給日期變數

declare @sql nvarchar(max)
set @sql='select @d=date from '+ @table
exec sp_executesql @sql,N'@d datetime output',@date output
print @date
--ps:如果@table輸出多的話@date只能保留最後一個值,要想保留表集的話,還是用臨時表或者表變數吧

D. mssql 如何把一個表中的 所有欄位都賦值一個相同的值

--假設分別是A表和B表,sql 如下:declaretableA_count number;tableB_count number;C_tableA CURSOR;begin select count(1) into tableA_count from A ; select count(1) into tableB_count from B ; C_tableA is selct * from A; if tableA_count=tableB_count then for C_cursor in C_tableA loop select * from A where exists (selcet 1 from B where A.column1=B.column1 and A.column2=B.column2...) and A.column1=C_cursor.column1 and ..; if SQL%NOTFOUND dbms_output.put_line("2個表的數據不是一樣的"); return; else; END LOOP; dbms_output.put_line("2個表的數據是一樣的"); else dbms_output.put_line("2個表的數據是一樣的"); end;

E. 表名為變數的sql插入語句

使用exec(sql語句)

例:使用變數拼接SQL語句,然後用exec運行

declare @table varchar(200)
declare @sql varchar(200)
set @table = 'aaa'
set @sql='select * from '+@table
exec(@sql)

例中的變數@table 即傳遞表名
sql='select * from '+@table 即 select * from aaa

熱點內容
ios登陸源碼 發布:2024-11-07 15:33:58 瀏覽:247
三d演算法 發布:2024-11-07 15:04:54 瀏覽:677
期貨指標公式源碼 發布:2024-11-07 14:53:05 瀏覽:316
sqlserver圖片路徑 發布:2024-11-07 14:37:56 瀏覽:67
磁羅經演算法 發布:2024-11-07 14:26:49 瀏覽:850
怎麼使用主機搭建伺服器 發布:2024-11-07 14:10:26 瀏覽:84
螞蟻礦機什麼配置 發布:2024-11-07 14:10:22 瀏覽:430
上海家譜資料庫 發布:2024-11-07 14:10:19 瀏覽:296
ibm伺服器如何修復系統 發布:2024-11-07 13:56:02 瀏覽:977
pythonarraylist 發布:2024-11-07 13:52:03 瀏覽:744