DECLARE在SQL中的用法及相关等等

DECLARE在SQL中的用法及相关等等:arrow:允许用户创建游标,用于在一个大的查询里面检索少数几行数据。变量是在批处理或过程的主体中用DECLARE语句声明的,并用SET或SELECT语句赋值。游标变量可使用此语句声明,并可用于其他与游标相关的语句。除非在声明中提供值,否则声明之后所有变量将初始化为NULL。Transact-SQL语法约定语法DECLARE{…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
:arrow:

允许用户创建游标, 用于在一个大的查询里面检索少数几行数据。

变量是在批处理或过程的主体中用 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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171342.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IDEA热部署不生效解决方案

    IDEA热部署不生效解决方案今天尝试热部署,没想到弄了半天没反应,最后经查阅发现此问题,希望同样问题的这个没配置的去添加试下,希望能帮到你第一步pom文件引入坐标&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-devtools…

  • navate15激活码【最新永久激活】

    (navate15激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~AE…

  • xampp环境下drupal安装心得[通俗易懂]

    xampp环境下drupal安装心得[通俗易懂]开始学习drupal,首先在关于drupal的安装上就出现了困难,让自己郁闷了好久,所幸最后安装成功,虽然依然有一些小瑕疵:貌似没有邮件发送功能,但这些应该是之后可以调整的,装了不下30次,最后担心自己电脑问题,还在同学的电脑上试了一下,安装成功的时候自己快泪奔了%>_能够遇到的问题基本都遇到了,甚至有些问题自己遇到了网上都查不到资料,记下来备忘吧。​安

  • php环境安装与配置_windows下php环境搭建

    php环境安装与配置_windows下php环境搭建配置时区打开php解压目录,找到php.ini-development文件,将其改名为php.ini,用记事本打开。找到(带分号);date.timezone=去掉前面的分好,修改为date.timezone=Asia/Shanghai测试:在根目录下的index.php文件夹中写入以下代码<?phpechodate(“Y:m:dH:i:s”…

  • Spring3 MVC请求参数获取的几种方法

     一、      通过@PathVariabl获取路径中的参数  @RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET) public String printMessage1(@PathVariable String id,@PathVariable String name, ModelMa…

  • Linux系统基本命令_linux常用基本命令

    Linux系统基本命令_linux常用基本命令本文主要介绍Linux中常用的基本命令,简单实用,以供大家参考,如有错误,欢迎大家指出。下面开始介绍。一、查看哪个用户登录的系统1、users命令2、whoami命令或者whoami命令二、查看哪些用户在系统上工作1、who命令2、w命令三、查看登录Linux系统所使用的终端1、tty命令四、显示操作系统的信息1、uname命令:un…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号