MS SQL 插入数据问题?

wentshop 1 2011-03-16 02:27:36
当表为空时可以向其中插入9999条随即产生的数据,但当表不为空时,插入9999数据时只能插入1598条数据(每次都是1598),但是当再次执行插入数据时(无论插入多少),上次少插入的8401条数据会再表中显示出来,这是为什么?
- - - - - - - - - - - - - - - - -
ALTER proc [dbo].[usp_addCard]
@cardName varchar(50),
@cardpValue int,
@cardPrice float,
@num int
as
begin
declare @cardId varchar(50),@cardpwd varchar(50),@i int
set @i = 0
if exists(select name from (select name = @cardName)a where name like '%魔兽%')
begin
while @i < @num
begin
select @cardId = 'MS'+convert(varchar(50),convert(varchar(50),cast(RAND()*100000 as int))+convert(varchar(50),cast(RAND()*1000000 as int))+convert(varchar(50),cast(RAND()*1000000 as int)))
select @cardpwd = convert(varchar(50),convert(varchar(50),cast(RAND()*100000 as int))+convert(varchar(50),cast(RAND()*1000000 as int)))
insert into tb_card values(@cardId,@cardName,@cardpwd,@cardPrice,@cardpValue,'images/card/2.jpg')
set @i = @i+1
end
end
else if exists(select name from (select name = @cardName)a where name like '%网易%')
begin
while @i < @num
begin
select @cardId = 'WY'+convert(varchar(50),convert(varchar(50),cast(RAND()*100000 as int))+convert(varchar(50),cast(RAND()*1000000 as int))+convert(varchar(50),cast(RAND()*1000000 as int)))
select @cardpwd = convert(varchar(50),convert(varchar(50),cast(RAND()*100000 as int))+convert(varchar(50),cast(RAND()*1000000 as int)))
insert into tb_card values(@cardId,@cardName,@cardpwd,@cardPrice,@cardpValue,'images/card/1.jpg')
set @i = @i+1
end
end
end

这是我的SQL语句,
执行 insert ..9999条.. 结果为 9999行影响,
删除完;
执行 insert ..1条.. 结果为 1行影响,
执行 insert ..9999条.. 结果为 1599行,
执行 insert ..1条.. 结果为 10001
谁能帮忙解释下?????



...全文
94 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wentshop 2011-03-19
没人喜欢找bug 吗 ? 都没遇到过这种情况??????
回复
wentshop 2011-03-18
[Quote=引用 15 楼 fredrickhu 的回复:]
引用 9 楼 wentshop 的回复:
我在机房的电脑上试的,每次只能添加860条记录,再次添加时才会连带上次少添加的添加上去,,感觉可能是SQL Server里面的设置问题,但是直接在SQL Server 里面执行每次都是全部添加成功,如果问题处理不了,到演示项目时,只能限定添加的条数 少于860 了

字段长度和表空间有限制?
[/Quote]

不应该是限制,因为在数据库界面直接添加 1W 条 2秒执行完,没有任何异常
回复
wentshop 2011-03-18
[Quote=引用 14 楼 fredrickhu 的回复:]
引用 8 楼 wentshop 的回复:
引用 7 楼 andy_liucj 的回复:
引用 6 楼 wentshop 的回复:
引用 4 楼 andy_liucj 的回复:
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的
……
[/Quote]

难道我写的不是先存到表里?
回复
--小F-- 2011-03-18
[Quote=引用 9 楼 wentshop 的回复:]
我在机房的电脑上试的,每次只能添加860条记录,再次添加时才会连带上次少添加的添加上去,,感觉可能是SQL Server里面的设置问题,但是直接在SQL Server 里面执行每次都是全部添加成功,如果问题处理不了,到演示项目时,只能限定添加的条数 少于860 了
[/Quote]
字段长度和表空间有限制?
回复
--小F-- 2011-03-18
[Quote=引用 8 楼 wentshop 的回复:]
引用 7 楼 andy_liucj 的回复:
引用 6 楼 wentshop 的回复:
引用 4 楼 andy_liucj 的回复:
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的


@cardName是传进来的字符串……
[/Quote]

先把传进来的字符串存入一张表中 然后再做处理就简单了
回复
wentshop 2011-03-18
[Quote=引用 11 楼 jinfengyiye 的回复:]
引用 4 楼 andy_liucj 的回复:
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的

难道就是传说中的注入广告。网易魔兽。
[/Quote]

不是啊,是我们的作业,做个点卡在线销售系统
回复
gw6328 2011-03-18
[Quote=引用 4 楼 andy_liucj 的回复:]
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的
[/Quote]
难道就是传说中的注入广告。网易魔兽。
回复
wentshop 2011-03-18
insert into tb_card values(@cardId,@cardName,@cardpwd,@cardPrice,@cardpValue,'images/card/2.jpg')

表结构不是主要的吧,从这句话中应该能知道表结构了
回复
wentshop 2011-03-18
我在机房的电脑上试的,每次只能添加860条记录,再次添加时才会连带上次少添加的添加上去,,感觉可能是SQL Server里面的设置问题,但是直接在SQL Server 里面执行每次都是全部添加成功,如果问题处理不了,到演示项目时,只能限定添加的条数 少于860 了
回复
wentshop 2011-03-18
[Quote=引用 7 楼 andy_liucj 的回复:]
引用 6 楼 wentshop 的回复:
引用 4 楼 andy_liucj 的回复:
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的


@cardName是传进来的字符串,把他当做一个表的一行一列进行查询其中是否包含关……
[/Quote]
那查找字符串中是否包含某些关键字该怎么写呢?
回复
andy_liucj 2011-03-16
[Quote=引用 6 楼 wentshop 的回复:]
引用 4 楼 andy_liucj 的回复:
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的


@cardName是传进来的字符串,把他当做一个表的一行一列进行查询其中是否包含关键字‘魔兽’,
(select name ……
[/Quote]你就是想查找@cardname里是否含有“魔兽”2字,也不需要搞这么高升吧,呵呵
回复
wentshop 2011-03-16
[Quote=引用 4 楼 andy_liucj 的回复:]
给的信息太少了,表结构你也没给,

SQL code
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的
[/Quote]

@cardName是传进来的字符串,把他当做一个表的一行一列进行查询其中是否包含关键字‘魔兽’,
(select name = @cardName)a 这是一个虚表,查询里面的关键字,我想要的就是在接收的字符串里查找关键字,我是这么想的 ,也没去网上找更好的方法
回复
andy_liucj 2011-03-16
画蛇添足了吧
回复
andy_liucj 2011-03-16
给的信息太少了,表结构你也没给,
select name from (select name = @cardName)a where name like '%魔兽%'

这是干什么用的
回复
wentshop 2011-03-16
[Quote=引用 1 楼 haiwer 的回复:]
检查方法有问题吧
[/Quote]
能具体说下吗?
回复
检查方法有问题吧
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-16 02:27
社区公告
暂无公告