小问题。 求解决啊 !!!!!!!!!!!!!!!!!!!!!!!!!!!!

ajq1989 2011-01-19 02:13:47

DECLARE @a int,@tname char
set @a =1;
set @tname = 'test';

WHILE @a <= 10
begin
@tname = @tname + @a;
insert into testTable(username,userpwd) values (@tname,'a');
@tname ='test';
@a = @a +1;
end;


上面的sql目的是批量插入10条数据,但是报错了,错在哪了?
求指点。
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw6328 2011-01-19
  • 打赏
  • 举报
回复
为什么一定要创建存储过程,我直接写了几次都不行。
ACMAIN_CHM 2011-01-19
  • 打赏
  • 举报
回复
已经了解MS SQL的语法基础上,参考一下MYSQL的手册就行了。

[Quote]第20章:存储程序和函数
目录

20.1. 存储程序和授权表

20.2. 存储程序的语法

20.2.1. CREATE PROCEDURE和CREATE FUNCTION

20.2.2. ALTER PROCEDURE和ALTER FUNCTION

20.2.3. DROP PROCEDURE和和DROP FUNCTION

20.2.4. SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION

20.2.5. SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS

20.2.6. CALL语句

20.2.7. BEGIN ... END复合语句

20.2.8. DECLARE语句

20.2.9. 存储程序中的变量

20.2.10. 条件和处理程序

20.2.11. 光标

20.2.12. 流程控制构造

20.3. 存储程序、函数、触发程序和复制:常见问题

20.4. 存储子程序和触发程序的二进制日志功能

MySQL 5.1版支持存储程序和函数。一个存储程序是可以被存储在服务器中的一套SQL语句。一旦它被存储了,客户端不需要再重新发布单独的语句,而是可以引用存储程序来替代。

下面一些情况下存储程序尤其有用:

· 当用不同语言编写多客户应用程序,或多客户
[/Quote]
ACMAIN_CHM 2011-01-19
  • 打赏
  • 举报
回复
[Quote=MySQL 5.1参考手册]下面是一个使用OUT参数的简单的存储程序的例子。例子为,在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql自己来解释。

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
当使用delimiter命令时,你应该避免使用反斜杠(‘\’)字符,因为那是MySQL的转义字符。

下列是一个例子,一个采用参数的函数使用一个SQL函数执行一个操作,并返回结果:

mysql> delimiter //

mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT('Hello, ',s,'!');
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world! |
+----------------+
1 row in set (0.00 sec)
如果在存储函数中的RETURN语句返回一个类型不同于在函数的RETURNS子句中指定类型的值,返回值被强制为恰当的类型。比如,如果一个函数返回一个ENUM或SET值,但是RETURN语句返回一个整数,对于SET成员集的相应的ENUM成员,从函数返回的值是字符串。
[/Quote].
小小小小周 2011-01-19
  • 打赏
  • 举报
回复
mysql> select * from cdr;
Empty set (0.00 sec)

mysql> drop procedure add_date;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter $$
mysql> create procedure add_date()
-> begin
-> declare i int default 0;
-> while i<=10 do
-> insert into cdr(id,userfield) values(i,'a');
-> set i=i+1;
-> end while;
-> end;$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call add_date();
Query OK, 1 row affected (0.39 sec)

mysql> select * from cdr;
+------+-----------+
| id | userfield |
+------+-----------+
| 0 | a |
| 1 | a |
| 2 | a |
| 3 | a |
| 4 | a |
| 5 | a |
| 6 | a |
| 7 | a |
| 8 | a |
| 9 | a |
| 10 | a |
+------+-----------+
11 rows in set (0.00 sec)
小小小小周 2011-01-19
  • 打赏
  • 举报
回复
要存储过程:

delimiter $$
create procedure add_date()
begin
declare i int default 0;
while i<=10 do
insert into cdr(id,userfield) values(i,'a');
set i=i+1;
end while;
end;$$
delimiter ;
iihero_ 2011-01-19
  • 打赏
  • 举报
回复
给你一个mysql的:
create table t (name varchar(32), no int);

mysql> delimiter //
mysql> create procedure test_insert (a int)
-> begin
-> set @i = 1;
-> while @i < a do
-> insert into t values('abc', @i);
-> set @i = @i + 1;
-> end while;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> call test_insert(100000);//
Query OK, 0 rows affected (2 min 10.13 sec)

ajq1989 2011-01-19
  • 打赏
  • 举报
回复
在mysql运行

不懂mysql 的语法是这样吗?
iihero_ 2011-01-19
  • 打赏
  • 举报
回复
begin
@tname = @tname + @a;
insert into testTable(username,userpwd) values (@tname,'a');
@tname ='test';
@a = @a +1;
end;
这之间的变量赋值,难道不用set @var = ....?

用的是SQL Server TSQL的语法?
小小小小周 2011-01-19
  • 打赏
  • 举报
回复
楼主你是ms sql?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧