sql怎么取区间

xiaoqi7456 2012-12-21 09:31:49
declare @n int

set @n=@n+1
...怎么表示 a in ([1-@n])

意思是循环取a =1的值,
a =1,2
a=1,2,3
语法是怎么样的?
...全文
414 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
ben我照你的改了。执行没错误但是一直在执行。 你帮我看下是循环错了吗?

DECLARE @sql varchar(max)

DECLARE @px int
DECLARE @n int 

SET @n=0
SET @px=1
WHILE @px<=(SELECT max(px) FROM #13)
WHILE @n < @px+5
	SET @n =@n+1
	SET @px=@px+1
SELECT @sql='SELECT sspbh,sum(ndhsl)AS sl  INTO #16 FROM #13 WHERE px between 1 and '+@px+' GROUP BY sspbh--次数为1,2的总数

	UPDATE a SET ndhsl=CASE
	WHEN a.ndhsl<=b.cl THEN 0
	WHEN ((a.ndhsl-b.cl)%a.ntpbzl)+(c.sl-d.sl)<a.ntpbzl
	THEN  a.ndhsl+(c.sl-d.sl)-b.cl ELSE ceiling((a.ndhsl-b.cl)/a.ntpbzl)*a.ntpbzl END
	FROM #12 a,# '+@n+ ' b,#15 c,#16 d
	WHERE a.px= '+@px+' AND a.sspbh=b.sspbh AND b.sspbh=c.sspbh AND a.sspbh=d.sspbh--- 更新2次的收货
	
	SELECT a.sspbh,CASE WHEN b.ndhsl<=a.cl THEN (a.cl-b.ndhsl)
	else (b.ntpbzl-abs(b.ndhsl-a.cl)%b.ntpbzl) END  AS cl INTO # '+@px+ ' FROM #' +@n+ ' a,#13 b
	WHERE a.sspbh=b.sspbh AND b.px='+@px+' end ' ---更新为2的差量 
exec (@sql) 
再来壹串 2012-12-21
  • 打赏
  • 举报
回复
DECLARE @i INT ,@t INT,@sql NVARCHAR(MAX)
SET @i = 1
SET @t =10

WHILE @i <=@t
BEGIN  
	SET @sql = N'SELECT 1 AS id INTO #'+CONVERT(NVARCHAR(2),@i)+';SELECT * FROM #'+CONVERT(NVARCHAR(2),@i)+''
	PRINT @sql
	EXEC (@sql)
	
	SET @i = @i +1
END
不知道是不是这个意思
我腫了 2012-12-21
  • 打赏
  • 举报
回复
DECLARE @sql varchar(max)
 
DECLARE @px int
DECLARE @n int 
SET @n=0
SET @px=1
WHILE @px<=(SELECT max(px) FROM #13)
--WHILE @n<@px+5
--BEGIN
--    SET @n=@n+1
SELECT  @sql='SELECT sspbh,sum(ndhsl)AS sl  INTO #16 FROM #13 WHERE px between 1 and '+ltrim(@px)+' GROUP BY sspbh'

--end

SET @px=@px+1
    
End
我腫了 2012-12-21
  • 打赏
  • 举报
回复
你的語句有問題,死循環,而且你的@n有什麽作用? 這是修改過後的:
DECLARE @sql varchar(max)
 
DECLARE @px int
DECLARE @n int 
SET @n=0
SET @px=1
WHILE @px<=(SELECT max(px) FROM #13)
--WHILE @n<@px+5
--BEGIN
--    SET @n=@n+1
SELECT  @sql='SELECT sspbh,sum(ndhsl)AS sl  INTO #16 FROM #13 WHERE px between 1 and '+ltrim(@px)+' GROUP BY sspbh

--end

SET @px=@px+1
    
End
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
类似这样的
DECLARE @sql varchar(max)

DECLARE @px int
DECLARE @n int 
SET @n=0
SET @px=1
SELECT  @sql='WHILE '+@px+ '<=(SELECT max(px) FROM #13)
WHILE '+@n+' < '+@px+'+5
BEGIN
	SET '+@n+' = '+@n+' +1
	SET '+@px+' = '+@px+' +1
SELECT sspbh,sum(ndhsl)AS sl  INTO #16 FROM #13 WHERE px between 1 and '+@px+' GROUP BY sspbh
end
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
引用 8 楼 bbbbbben 的回复:
SQL code ? 1234567 Declare @n int,@sql nvarchar(max) Set @n=1 Set @sql='Select * from #'+ltrim(@n) Exec (@sql)
谢谢ben 我的变量是循环的。如果是@sql=' whlie '..接在后面就提示我varchar 不能转换成int 报错
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
引用 7 楼 mail_yq 的回复:
表示没看懂题
6楼的问题没看懂吗? 可能我描述不清楚。能帮我解决6楼的问题,类似的我就清楚了
我腫了 2012-12-21
  • 打赏
  • 举报
回复
Declare @n int,@sql nvarchar(max)

Set @n=1

Set @sql='Select * from #'+ltrim(@n)

Exec (@sql)
再来壹串 2012-12-21
  • 打赏
  • 举报
回复
表示没看懂题
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
没人帮忙吗? 假如有个循环变量 @n=1 我就定义表#1 @n=2 定义表#2 怎么写sql 。。
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
其实是表示问题。 比如我有个临时表 但是我要用变量表示 比如#@n ,我改怎么写呢?
哥眼神纯洁不 2012-12-21
  • 打赏
  • 举报
回复

declare @n int
declare @a varchar(100)
set @n=1
while(@n<10)
begin
select @a=isnull(@a+',','')+convert(varchar,@n)
set @n=@n+1
select @a
end
这样?还是我理解错了?
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
他提示我 列名 '1-@n' 无效。
SRCS000 2012-12-21
  • 打赏
  • 举报
回复
引用 1 楼 SRCS000 的回复:
declare @n int while @n <10 begin ... WHERE a in ([1-@n]) ... select @n=@n+1 END
declare @n int SELECT @n=0 while @n <10 begin ... WHERE a in ([1-@n]) ... select @n=@n+1 END
SRCS000 2012-12-21
  • 打赏
  • 举报
回复
declare @n int while @n <10 begin ... WHERE a in ([1-@n]) ... select @n=@n+1 END
xiaoqi7456 2012-12-21
  • 打赏
  • 举报
回复
对 。谢谢ben 没看清楚- -
我腫了 2012-12-21
  • 打赏
  • 举报
回复
估計了一下你要的.
DECLARE @sql varchar(max)
DECLARE @sql varchar(max)
 
DECLARE @px int
DECLARE @n int 
 
SET @n=0
SET @px=1
WHILE @px<=(SELECT max(px) FROM #13)
	BEGIN
		SELECT @sql='SELECT sspbh,sum(ndhsl)AS sl  INTO #16 FROM #13 WHERE px between 1 and '+LTRIM(@px)+' GROUP BY sspbh--次数为1,2的总数'

			WHILE @n < @px+5
				BEGIN
					SET @n =@n+1
					 
					SELECT @sql=@sql+'UPDATE a SET ndhsl=CASE
					WHEN a.ndhsl<=b.cl THEN 0
					WHEN ((a.ndhsl-b.cl)%a.ntpbzl)+(c.sl-d.sl)<a.ntpbzl
					THEN  a.ndhsl+(c.sl-d.sl)-b.cl ELSE ceiling((a.ndhsl-b.cl)/a.ntpbzl)*a.ntpbzl END
					FROM #12 a,# '+LTRIM(@n)+ ' b,#15 c,#16 d
					WHERE a.px= '+LTRIM(@px)+' AND a.sspbh=b.sspbh AND b.sspbh=c.sspbh AND a.sspbh=d.sspbh--- 更新2次的收货
				     
					SELECT a.sspbh,CASE WHEN b.ndhsl<=a.cl THEN (a.cl-b.ndhsl)
					else (b.ntpbzl-abs(b.ndhsl-a.cl)%b.ntpbzl) END  AS cl INTO # '+LTRIM(@px)+ ' FROM #' +LTRIM(@n)+ ' a,#13 b
					WHERE a.sspbh=b.sspbh AND b.px='+LTRIM(@px)+' end ' ---更新为2的差量 
				End    
		SET @px=@px+5
		exec (@sql) 
	END
我腫了 2012-12-21
  • 打赏
  • 举报
回复
你這個語句會死循環..
WHILE @n < @px+5
    SET @n =@n+1
    SET @px=@px+1

34,837

社区成员

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

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