sqlserver 2005 函数+游标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 2005 函数+游标相关的知识,希望对你有一定的参考价值。

把表A里面ct_monday 这个字段的值 8:00-10:00,10:30-12:00,14:00-23:00 用函数+游标分割成 8:00 10:00 ......,而且这个8:00-10:00,10:30-12:00,14:00-23:00 还不一定只有这几个时间段,可能后面还有“,” 具体有多少个“,”不能确定。 该怎么实现啊,有哪位高手知道的,帮忙解决下,把T/sql块写下来

游标实现方法

Declaer @FieldNames varchar(1000)
Declare @FieldName varchar(30)
Set @FieldNames = \'\'
定义游标
Select FieldNames = case when ct_monday between 开始值 and 结束值 then 字段名
when ct_monday between 开始值 and 结束值 then 字段名
when ct_monday between 开始值 and 结束值 then 字段名
,,,,,,,,
End
from A
条件

打开游标
取游标值语句 @FieldName
循环
begin
if @FieldNames <> \'\'
set @FieldNames = @FieldNames + \',\'
set @FieldNames = @FieldNames + @FieldName + \' decimal(10,2) NULL\'
取游标值语句 @FieldName
END
end
关闭游标
释放游标
if exists(select 1 from sysobjects where name = \'表名\')
drop table 表名
exec(\'Create table 表名 (\' + @FieldNames + \')\'
参考技术A create function func_splitstring(@str nvarchar(max),@split varchar(10))returns @t Table (c1 varchar(100))asbegin declare @i int declare @s int set @i=1 set @s=1 while(@i>0) begin set @i=charindex(@split,@str,@s) if(@i>0) begin insert @t(c1) values(substring(@str,@s,@i-@s)) end else begin insert @t(c1) values(substring(@str,@s,len(@str)-@s+1)) end set @s = @i + 1 end returnend

sqlserver 游标

DECLARE ChangeInvCodeCursor CURSOR
FOR SELECT A.name AS tablecolumn,C.name AS tablename FROM sys.columns A LEFT JOIN sys.types B ON A.user_type_id = B.user_type_id RIGHT JOIN SYS.tables C ON C.object_id=A.object_id WHERE A.name =‘CINVCODE‘OR A.name=‘INVCODE‘ ORDER BY C.NAME
--打开游标
OPEN ChangeInvCodeCursor
DECLARE @tablecolumn1 nvarchar(120)
DECLARE @tablename1 nvarchar(120)
DECLARE @strsql nvarchar(2048)
DECLARE @BeforeCode nvarchar(120)
DECLARE @afterCode nvarchar(120)
FETCH NEXT FROM ChangeInvCodeCursor INTO @tablecolumn1,@tablename1
WHILE @@FETCH_STATUS =0
BEGIN
--变化前存货编码
set @BeforeCode=‘0111‘
--变化后存货编码
set @afterCode=‘0222‘
set @strsql=‘update ‘[email protected]+‘ set ‘[email protected]+‘=‘‘‘[email protected]+‘‘‘ where ‘[email protected]+‘=‘‘‘[email protected]+‘‘‘‘
exec(@strsql)
FETCH NEXT FROM ChangeInvCodeCursor INTO @tablecolumn1,@tablename1
END
--关闭游标
CLOSE ChangeInvCodeCursor
DEALLOCATE ChangeInvCodeCursor

以上是关于sqlserver 2005 函数+游标的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver2005如何把row_numbe函数的值赋值给某一列

50分求sql题

什么是可信连接?

Sql server 问题处理

sqlserver2005 表值函数

sqlserver自定义函数里面 怎么循环查询多条结果集