-
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
更多相关内容 -
SQLserver中的declare变量用法
2020-12-14 06:35:45SQL中的declare用法 平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。 大家都知道c#中的局部... -
sql中declare是什么意思
2021-01-19 05:05:18展开全部sql中declare是声明的意思32313133353236313431303231363533e58685e5aeb931333365653236,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个...展开全部
sql中declare是声明的意思32313133353236313431303231363533e58685e5aeb931333365653236,就是声明变量的,这个一般是用在函数和存储过程中的。比如说,这个存储过程是,只要你把学号输入进来,就能查询这个学生的班级。那么在这个存储过程里面, 学号就是参数。你给什么学号, 它就返回给你相应的班级。又或者你也可以做成, 只要你输入学号, 这个存储过程就会将这个学生删除。
mysql存储过程中,定义变量有两种方式:
1.使用set或select直接赋值,变量名以 @ 开头.
例如:set @var=1;
可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。
2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
DECLARE var1 INT DEFAULT 0;
主要用在存储过程中,或者是给存储传参数中。
两者的区别是:
在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。
在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
例:
set @v_sql= sqltext;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
有的时候在查询更新数据库的时候,需要多条语句的查询,因此需要多次修改
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:04MySQLdeclare语句是我们经常用到的语句,下文就为您举例说明了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:15declare这个类型,其实可以理解为Java里面的public类型变量,全局有效,当然非要较真的话,我觉得归到protected类也可以(不理解的话不要看后半段,只是为了严谨) Java修饰符 public: 对所有类可见。使用对象:... -
Oracle中declare如何使用
2021-05-14 14:04:01Oracle中declare的使用方法 首先我们需要了解declare遵循下面的实现结构 declare --声明 begin --开始 end; --结束 了解之后,我们就可以在这个结构中添加语句实现小功能 例如:输出今天的日期 declare --声明 date... -
mysql中declare语句用法详解
2021-01-19 04:30:43mysql中的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:13check 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:02declare 在 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:551.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定义变量的区别
2020-09-09 22:17:00下面小编就为大家带来一篇浅谈MySQL存储过程中declare和set定义变量的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
sql 存储过程中何时使用declare声明变量
2019-10-03 02:01:55其中变量名为了与数据库中的列名相互区别,所以变量名有一个前置@符号,比如说:declare @count int 就是将变量@count声明为int类型的,以后可以使用变量@count作为整型变量使用。在这里可能有一些误解,有人认为@... -
MySQL的存储过程declare语句报错 游标
2017-12-18 19:12:02DELIMITER $$ 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,set,@)使用实例讲解
2020-02-19 15:21:42mysql declare用于定义变量,在存储过程和函数中通过declare定义变量在BEGIN...END中,且在语句之前。并且可以通过重复定义多个变量 declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。... -
mysql或则oracle的declare可以放在操作语句的后面吗?
2015-07-16 21:52:56答案是肯定不能的 DECLARE必须在一开始定义部分。不管是那种数据库,在mysal中定义后的变量在再次引用时不能再用@了,没有声明的还是要加@,而oracle中一个变量一定要声明的,而且必须要放在开始。 -
mysql存储过程之游标(DECLARE)原理与用法详解
2020-12-15 02:07:28本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下: 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的... -
mysql的set和declare区别
2015-03-04 16:35:212.SET可以定义全局或者是会话的变量,DECLARE只能用在BEGIN....END....里面,相当于是局部变量 3.SET必须赋值,DECLARE不赋值默认为NULL 4.SET的变量前面要加@,在定义和使用的时候都要加上@,而DECLARE则不用 -
mysql 存储过程使用游标时 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE 会提前执行的坑...
2018-10-25 11:33:00通过测试得出,declare continue handler for not found set done = true 是对全局的select有效的,只要有一条select语句返回空,那么就是触发该语句。 解决方法就是确保while里面的select永远不会返回空 ... -
使用SQL语句清空数据库所有表的数据
2020-12-14 23:50:23近来发现数据库过大,空间不足,... declare @trun_name varchar(8000) set @trun_name='' select @trun_name=@trun_name + 'truncate table ' + [name] + ' ' from sysobjects where xtype='U' and status > 0 -
SQLserver删除某数据库中所有表实现思路
2020-12-15 02:42:00方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库中的约束,代码如下 代码如下: –删除所有约束 DECLARE c1 cursor for select’alter table [‘+ object_name(parent_obj)+’]... -
修改数据库为多用户模式
2020-12-15 17:47:03DECLARE @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:50SQL Serever学习14——存储过程和触发器存储过程在数据库中很多查询都是大同小异,编写他们费时费力,将他们保存起来,以后执行就很方便了,把SQL语句“封装”起来。存储过程的概念存储过程是一组SQL语句集,经过... -
sql server 2012 数据库所有表里查找某字符串的方法
2020-12-15 09:50:37代码如下:USE [数据库名称]; –1.定义需要查找的关键字。在搜索中,使用模糊搜索:LIKE ‘%@key_find%’ DECLARE @key_find NVARCHAR(MAX) = ‘123’;–假设是找字符串”123″ –2.用游标Cursor_Table,遍历所有... -
MSSQL 清空数据库的方法
2021-01-19 22:12:23一 清空数据库里所有的表 代码如下:DECLARE @tablename varchar(50) DECLARE @truncatesql varchar(255) DECLARE TrCun_Cursor CURSOR FOR select [name] from sysobjects where type = ‘U’ –有条件的清空表 ... -
SqlServer强制断开数据库已有连接的方法
2020-12-15 13:31:47在执行建库脚本时,往往会先将原有的数据库drop掉,由于SqlServer检测到有数据连接时禁止执行drop database操作,所以建库脚本经常执行失败,为此我们需要一种能强制断开数据库已有连接的方法,可以过如下t-sql实现... -
清空数据库中所有表记录 记录ID恢复从0开始
2020-12-15 05:09:451.搜索出所有表名,构造为一条SQL语句 代码如下: declare @trun_name varchar(8000) set @trun_name=” select @trun_name=@trun_name + ‘truncate table ‘ + [name] + ‘ ‘ from sysobjects where xtype=’U’ ...