为什么查询的结果总一样

lic_go 2009-08-10 08:33:23

declare
@productId int
begin
SELECT @productId = ProductId FROM PTOrderDetail
print @productId
end

每次执行上面的语句后,为什么查询出来后再赋值给@productId的结果总是同一个值?
这是怎么回事?
...全文
139 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQS_DG2007 2009-08-13
  • 打赏
  • 举报
回复
在这类语句中,最好先给变量赋值,否则,在循环时就会出现不可预料的结果
softwaretailor2009 2009-08-13
  • 打赏
  • 举报
回复
循环语句 输出总是最后一条的值
chencane 2009-08-10
  • 打赏
  • 举报
回复
如果楼主是想取出最后插入数据的Id,可以用
Select @@identity

楼主的SQL语句,是获得最后一个记录的id,但是要确定最后一条记录是哪条记录(排序)

stszd604 2009-08-10
  • 打赏
  • 举报
回复
标记~~~~~~~~~~~``
ivyxiaoyao 2009-08-10
  • 打赏
  • 举报
回复
你这样写的话@productId的值永远是表中最后一条记录的赋值
yeyanbinghappy 2009-08-10
  • 打赏
  • 举报
回复
你每次查询都得到的是最后一条记录
chowyi 2009-08-10
  • 打赏
  • 举报
回复
sql是强大的语言
SQL77 2009-08-10
  • 打赏
  • 举报
回复
declare @productId int
declare @COUNT int
SET @COUNT =0
DECLARE @iNT INT
SET @INT=(SELECT MAX(ProductId ) FROM PTOrderDetail)
WHILE @COUNT<=@INT
begin
SELECT @productId = ProductId FROM PTOrderDetail
print @productId
SET @COUNT=@COUNT+1
end
这样试试/
黄_瓜 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sql77 的回复:]
SQL codedeclare@productIdintSET@productId=0DECLARE@iNTINTSET@INT=(SELECTMAX(ProductId )FROM PTOrderDetail)WHILE@productId<=@INTbeginSELECT@productId= ProductIdFROM PTOrderDetailprint@productIdSET@prod¡­
[/Quote]

貌似循环也只出来一个
SQL77 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lic_go 的回复:]
引用 4 楼 sql77 的回复:
SQL codedeclare@productIdintSET@productId=0DECLARE@iNTINTSET@INT=(SELECTMAX(ProductId )FROM PTOrderDetail)WHILE@productId <=@INTbeginSELECT@productId= ProductIdFROM PTOrderDetailprint@productIdSET@prod¡­

你这个是死循环。。。。。
[/Quote]]

呵呵,写错了,得还用一个参数,呵呵,你自己改改
lic_go 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sql77 的回复:]
SQL codedeclare@productIdintSET@productId=0DECLARE@iNTINTSET@INT=(SELECTMAX(ProductId )FROM PTOrderDetail)WHILE@productId<=@INTbeginSELECT@productId= ProductIdFROM PTOrderDetailprint@productIdSET@prod¡­
[/Quote]
你这个是死循环。。。。。
lic_go 2009-08-10
  • 打赏
  • 举报
回复
那要怎么写呢?
黄_瓜 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zjb211434 的回复:]
因为每次查出一个ProductId就对变量@productId赋值,也就是说后面的赋值会把前面的值覆盖,所以这样select出来的@productId的值肯定是表中最后一个productid的值
[/Quote]
分析的很正对
gaojie001 2009-08-10
  • 打赏
  • 举报
回复
因为你输给变量的都是最后一条记录的值,不知对否
SQL77 2009-08-10
  • 打赏
  • 举报
回复
declare 
@productId int
SET @productId =0
DECLARE @iNT INT
SET @INT=(SELECT MAX(ProductId ) FROM PTOrderDetail)
WHILE @productId<=@INT
begin
SELECT @productId = ProductId FROM PTOrderDetail
print @productId
SET @productId=@productId+1
end
不会吧,如果不是一条记录你早都报错了,要么写个循环
soft_wsx 2009-08-10
  • 打赏
  • 举报
回复
declare 
@productId int
begin
SELECT @productId = ProductId FROM PTOrderDetail
print @productId
end

为语句最后一条记录的值
zjb211434 2009-08-10
  • 打赏
  • 举报
回复
因为每次查出一个ProductId就对变量@productId赋值,也就是说后面的赋值会把前面的值覆盖,所以这样select出来的@productId的值肯定是表中最后一个productid的值
黄_瓜 2009-08-10
  • 打赏
  • 举报
回复
SELECT @productId = ProductId FROM PTOrderDetail
这一句加个where 条件,你试着用不同的where条件就出来不同的结果了
gulechina 2009-08-10
  • 打赏
  • 举报
回复
看看

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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