精华内容
下载资源
问答
  • 2021-01-19 10:09:19

    我把一些报告,从MSSQL数据库的使用在一个MySQL数据库,似乎不懂得如何在MySQL中DECLARE作品。以下是报告的SQL代码,与MSSQL中的一样。我读DECLARE只能用于嵌套函数,我相信,但这听起来不正确。

    当前报表SQL:(我解析&从我的应用程序代码替换当前&待定的值)

    DECLARE @Current int;

    DECLARE @Pending int;

    SET @Current = [1];

    SET @Pending = [3];

    Select Ticket.TIcketID,

    ISNULL((Select LocationName from Location where LocationID = Ticket.SiteCurrentLocation), 'Invalid Location') as [Current Location],

    ISNULL((Select LocationName from Location where LocationID = Ticket.SitePendingLocation), 'Invalid Location') as [Pending Location]

    from Ticket

    where

    (SitePendingLocation > 0 AND SitePendingLocation <> SiteCurrentLocation) AND

    (SiteCurrentLocation = @Current OR @Current = 0) AND

    (SitePendingLocation = @Pending OR @Current = 0)

    任何见解?

    谢谢 - 安德鲁

    编辑

    工作,转换脚本 - 它可以帮助别人:

    SET @Current = '1';

    SET @Pending = '1';

    Select Ticket.TIcketID,

    IFNULL((Select LocationName from Location where LocationID = Ticket.SiteCurrentLocation), 'Invalid Location') as `Current Location`,

    IFNULL((Select LocationName from Location where LocationID = Ticket.SitePendingLocation), 'Invalid Location') as `Pending Location`

    from Ticket

    where

    (SitePendingLocation > 0 AND SitePendingLocation <> SiteCurrentLocation) AND

    (SiteCurrentLocation = @Current OR @Current = 0) AND

    (SitePendingLocation = @Pending OR @Current = 0)

    +1

    您可以使用SET本身(无DECLARE)或使用_替换@(或无前缀)。有关类似问题,请参阅http://stackoverflow.com/questions/763718/whats-wrong-with-this-mysql-statement-declare-id-int。 –

    2011-12-14 00:24:00

    更多相关内容
  • SQL中的declare用法 平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。 大家都知道c#中的局部...
  • sql中declare是什么意思

    千次阅读 2021-01-19 05:05:18
    展开全部sql中declare是声明的意思32313133353236313431303231363533e58685e5aeb931333365653236,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个...

    展开全部

    sql中declare是声明的意思32313133353236313431303231363533e58685e5aeb931333365653236,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个学生的班级。那么在这个存储过程里面, 学号就是参数。你给什么学号, 它就返回给你相应的班级。又或者你也可以做成, 只要你输入学号, 这个存储过程就会将这个学生删除。

    441966499aa99d84d98c48d66e96a342.png

    mysql存储过程中,定义变量有两种方式:

    1.使用set或select直接赋值,变量名以 @ 开头.

    例如:set @var=1;

    可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。

    2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:

    DECLARE var1  INT DEFAULT 0;

    主要用在存储过程中,或者是给存储传参数中。

    两者的区别是:

    在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。

    7ac71219d471f2adb46c47f6f876f147.png

    在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。

    例:

    set @v_sql= sqltext;

    PREPARE stmt FROM @v_sql;

    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;

    858cc0d603bfbde7671236a9cd573e64.png

    有的时候在查询更新数据库的时候,需要多条语句的查询,因此需要多次修改

    declare可以满足多次执行,但数据只修改一次。

    declare @local_variable data_type

    DECLARE: 定义变量,变量第一个字母是“@”

    声明时需要指定变量的类型,

    可以使用set和select对变量进行赋值,

    在sql语句中就可以使用@local_variable来调用变量

    声明中可以提供值,否则声明之后所有变量将初始化为NULL。

    展开全文
  • SQL中的declare用法

    万次阅读 2018-04-11 17:35:20
    平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。大家都知道c#中的局部变量,在if中如果...
    

    平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。

    大家都知道c#中的局部变量,在if中如果我们定义一个变量的话他的作用到if结束为止,if外是不识别这个变量的,else里都不能使用,简单的写一下。

    if (true)
    {
          Int32 i = 1;
          Console.WriteLine(i);
    }

    这个i的作用域就是if里面,如果我们在if外面用这个变量

     

     

    if (true)
    {
        Int32 i = 1;
        Console.WriteLine(i);
    }
    Console.WriteLine(i);

     

    那第二条输出语句会报错

    The name 'i' does not exist in the current context

    说明已经出了i的作用域了。

    那么我们要是在sql写这么一段代码会是什么情况呢?首先写在if内 

    IF 1=1
    BEGIN
        DECLARE @test VARCHAR
        SET @test='1'   
        PRINT 'in if:'+@test
    END

      运行看结果输出in if:1这是可以预想的结果。那我们在if外面使用变量@test试试。

      

     

     

    复制代码
    IF 1=1
    BEGIN
       DECLARE @test VARCHAR
       SET @test='1'   
       PRINT 'in if:'+@test
    END
    PRINT 'out if:'+@test
    复制代码

     

    这样会是什么结果呢,不知道大家怎么想的,以我的大脑顺势就想到这应该报错啊,出了变量的作用域了。实际结果不仅没报错而且@test的值还在。

     in if:1

     out if:1

    看见这个结果当时我很郁闷,SQL太出人意料了。

    在SQL SERVER 2005的帮助文档里关于declare的帮助里发现这么一句话,备注的第三行“局部变量的作用域是其被声明时所在批处理”

    Msdn的地址:http://msdn.microsoft.com/zh-cn/library/ms188927.aspx

    这行字在这么一大篇中还真挺不引人瞩目。

    现在我们知道原来declare变量的作用域是所在的批处理,if阻断不了它的作用域,那上面我们的代码if内外的代码都在一个批处理中,所以@test都是可用的且if里面设置的值还在。

    下面我改造一下代码,SQL中是以GO语句来区分批处理的

     

    复制代码
    IF 1=1
    BEGIN
       DECLARE @test VARCHAR
       SET @test='1'   
       PRINT 'in if:'+@test
    END
    GO
    PRINT 'out if:'+@test
    复制代码

     

     

    这下对了,检查语法后SQL报错“必须声明标量变量"@test"”

     

    注:GO就是用于一个sql语句的结束 比如说一个批处理语句是这样的 select *from ,b select *from a 在后一个select后面加上一个GO这样可以一次执行两条sql 语句

    展开全文
  • MySQL declare语句用法介绍

    千次阅读 2021-01-25 19:41:04
    MySQLdeclare语句是我们经常用到的语句,下文就为您举例说明了MySQL declare语句的用法,希望对您学习MySQL declare语句的使用能有所帮助。MySQL declare语句是在复合语句中声明变量的指令。(1)Example with two ...

    MySQL declare语句是我们经常用到的语句,下文就为您举例说明了MySQL declare语句的用法,希望对您学习MySQL declare语句的使用能有所帮助。

    MySQL declare语句是在复合语句中声明变量的指令。

    (1)Example with two DECLARE statements  两个DECLARE语句的实例

    CREATE PROCEDURE p8 ()

    BEGIN

    DECLARE a INT;

    DECLARE b INT;

    SETa=5;

    SETb=5;

    INSERT INTO t VALUES (a);

    SELECT s1 * a FROM t WHERE s1>= b;

    END; // /* I won't CALL this */

    在过程中定义的变量并不是真正的定义,你只是在BEGIN/END块内定义了而已(译注:也就是形参)。注意这些变量和会话变量不一样,不能使用修饰符@你必须清楚的在BEGIN/END块中声明变量和它们的类型。变量一旦声明,你就能在任何能使用会话变量、文字、列名的地方使用。

    (2)Example with no DEFAULT clause and SET statement  没有默认子句和设定语句的例子

    CREATE PROCEDURE p9 ()

    BEGIN

    DECLARE a INT /* there is no DEFAULT clause */;

    DECLARE b INT /* there is no DEFAULT clause */;

    SETa=5; /* there is a SET statement */

    SETb=5; /* there is a SET statement */

    INSERT INTO t VALUES (a);

    SELECT s1 * a FROM t WHERE s1>= b;

    END; // /* I won't CALL this */

    有很多初始化变量的方法。如果没有默认的子句,那么变量的初始值为NULL。你可以在任何时候使用SET语句给变量赋值。

    (3)Example with DEFAULT clause  含有DEFAULT子句的例子

    CREATE PROCEDURE p10 ()

    BEGIN

    DECLARE a, b INT DEFAULT 5;

    INSERT INTO t VALUES (a);

    SELECT s1 * a FROM t WHERE s1>= b;

    END; //

    我们在这里做了一些改变,但是结果还是一样的。在这里使用了DEFAULT子句来设定初始值,这就不需要把DECLARE和SET语句的实现分开了。

    (4)Example of CALL  调用的例子

    mysql>CALL p10() //

    +--------+

    | s1 * a |

    +--------+

    | 25 |

    | 25 |

    +--------+

    2 rows in set (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    结果显示了过程能正常工作

    (5) Scope  作用域

    CREATE PROCEDURE p11 ()

    BEGIN

    DECLARE x1 CHAR(5) DEFAULT 'outer';

    BEGIN

    DECLARE x1 CHAR(5) DEFAULT 'inner';

    SELECT x1;

    END;

    SELECT x1;

    END; //

    展开全文
  • SqlServer declare类型的变量用法

    千次阅读 2021-04-14 09:29:15
    declare这个类型,其实可以理解为Java里面的public类型变量,全局有效,当然非要较真的话,我觉得归到protected类也可以(不理解的话不要看后半段,只是为了严谨) Java修饰符 public: 对所有类可见。使用对象:...
  • Oracle中declare如何使用

    千次阅读 2021-05-14 14:04:01
    Oracle中declare的使用方法 首先我们需要了解declare遵循下面的实现结构 declare --声明 begin --开始 end; --结束 了解之后,我们就可以在这个结构中添加语句实现小功能 例如:输出今天的日期 declare --声明 date...
  • mysql中declare语句用法详解

    千次阅读 2021-01-19 04:30:43
    mysql中的DECLARE语句是在复合语句中声明变量的指令。(1)Example with two DECLARE statements两个DECLARE语句的实例CREATE PROCEDURE p8 ()BEGINDECLARE a INT;DECLARE b INT;SET a = 5;SET b = 5;INSERT INTO t ...
  • MySQL 5.7执行declare报错

    千次阅读 2021-05-13 06:47:13
    check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE userName VARCHAR(20) 解决:将DECLARE 放在在存储过程、函数或者触发器中,再调用函数(call 函数名...
  • Oracle Declare 变量声明

    千次阅读 2021-05-02 03:46:02
    declare 在 Oracle 一般是用在函数、存储过程和块结构及简单的事务中。普通变量声明declare v_number number(10); -- 长度10v_char varchar2(20); -- 长度20带默认值declare v_number number(10) := 10; -- 长度10v_...
  • T-SQL之DECLARE,SET,PRINT语句

    千次阅读 2020-04-14 13:55:55
    1.DECLARE语句 DECLARE语句是数据声明语句,主要作用是声明局部变量、函数、存储过程或游标变量等; 基本语法格式: DECLARE{ { @local_variable [AS] data_type } | [= value] } [,...n] @local_variable即变量...
  • SQL之定义变量(DECLARE

    万次阅读 2017-12-26 11:10:10
    有的时候在查询更新数据库的时候,需要多条语句的查询,因此需要多次修改 declare可以满足多次执行,但数据只修改一次。 declare @local_variable data_type DECLARE: 定义变量,变量第一个字母是“@”...
  • 下面小编就为大家带来一篇浅谈MySQL存储过程中declare和set定义变量的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 其中变量名为了与数据库中的列名相互区别,所以变量名有一个前置@符号,比如说:declare @count int 就是将变量@count声明为int类型的,以后可以使用变量@count作为整型变量使用。在这里可能有一些误解,有人认为@...
  • MySQL的存储过程declare语句报错 游标

    千次阅读 2017-12-18 19:12:02
    DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_ave_cursor_procedure`() ...declare aveno char(11); declare avename char(10); declare avegrade float; drop table if exists fail_stude
  • mysql declare用于定义变量,在存储过程和函数中通过declare定义变量在BEGIN...END中,且在语句之前。并且可以通过重复定义多个变量 declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。...
  • 答案是肯定不能的 DECLARE必须在一开始定义部分。不管是那种数据库,在mysal中定义后的变量在再次引用时不能再用@了,没有声明的还是要加@,而oracle中一个变量一定要声明的,而且必须要放在开始。 
  • 本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下: 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的...
  • mysql的set和declare区别

    2015-03-04 16:35:21
    2.SET可以定义全局或者是会话的变量,DECLARE只能用在BEGIN....END....里面,相当于是局部变量 3.SET必须赋值,DECLARE不赋值默认为NULL 4.SET的变量前面要加@,在定义和使用的时候都要加上@,而DECLARE则不用
  • 通过测试得出,declare continue handler for not found set done = true 是对全局的select有效的,只要有一条select语句返回空,那么就是触发该语句。 解决方法就是确保while里面的select永远不会返回空 ...
  • 近来发现数据库过大,空间不足,...  declare @trun_name varchar(8000)  set @trun_name=''  select @trun_name=@trun_name + 'truncate table ' + [name] + ' ' from sysobjects where xtype='U' and status > 0
  • 方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库中的约束,代码如下 代码如下: –删除所有约束 DECLARE c1 cursor for select’alter table [‘+ object_name(parent_obj)+’]...
  • DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM master..sysprocesses WHERE dbid=DB_ID('数据库名称'); EXEC(@SQL); GO ALTER DATABASE '数据库名称' SET MULTI_...
  • 存储过程 触发器 declare

    千次阅读 2021-01-20 01:43:50
    SQL Serever学习14——存储过程和触发器存储过程在数据库中很多查询都是大同小异,编写他们费时费力,将他们保存起来,以后执行就很方便了,把SQL语句“封装”起来。存储过程的概念存储过程是一组SQL语句集,经过...
  • 代码如下:USE [数据库名称]; –1.定义需要查找的关键字。在搜索中,使用模糊搜索:LIKE ‘%@key_find%’ DECLARE @key_find NVARCHAR(MAX) = ‘123’;–假设是找字符串”123″ –2.用游标Cursor_Table,遍历所有...
  • 一 清空数据库里所有的表 代码如下:DECLARE @tablename varchar(50) DECLARE @truncatesql varchar(255) DECLARE TrCun_Cursor CURSOR FOR select [name] from sysobjects where type = ‘U’ –有条件的清空表 ...
  • 在执行建库脚本时,往往会先将原有的数据库drop掉,由于SqlServer检测到有数据连接时禁止执行drop database操作,所以建库脚本经常执行失败,为此我们需要一种能强制断开数据库已有连接的方法,可以过如下t-sql实现...
  • 1.搜索出所有表名,构造为一条SQL语句 代码如下: declare @trun_name varchar(8000) set @trun_name=” select @trun_name=@trun_name + ‘truncate table ‘ + [name] + ‘ ‘ from sysobjects where xtype=’U’ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,254
精华内容 60,101
关键字:

数据库declare