各位大侠帮我看一下这条查询最大单据编号的语句有什么错误
各位大侠帮我看一下这条查询最大单据编号的语句有什么错误,我的单据编号格式为(201011001即:年+月+001),SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC --------------------编程问答-------------------- SUBSTRING(djbh, 1, 6) 截取后是20101100CONVERT (varchar(6), GETDATE(), 112) 转换后格式是yyyyMMdd,肯定不相等 --------------------编程问答-------------------- 语句没有问题. --------------------编程问答--------------------
那么应该怎么写才对呢,昨天我的程序出错,是因为没有201012001 这种格式的单据编号,加入一条之后就不在出错,所以我知道是这条查询语句写的不全面 --------------------编程问答-------------------- 对一楼的回答非常不解. --------------------编程问答-------------------- select max(djbh) from 表名 --------------------编程问答--------------------
这样肯定不行,如果我的最大单据编号是201011100,就会出错 --------------------编程问答-------------------- 我觉得sql语句本身应该没有问题(或者说问题不大),无非返回的是0行,如果用max(djbh),返回的是null;
那么问题在你的后续处理,要考虑本月没有数据,取不到最大单据号的时候应该如何? --------------------编程问答--------------------
本月的单据编号我必须是要以201012开头,不能延续上个月的201011,关键是语句不知道怎么写,大侠,帮我写写吧 --------------------编程问答-------------------- 首先你这个设计方案是有缺陷的,要想做好这个方案不是一个表能解决的。
最简单的处理方法
表:Sequence表,上次取数,要增加个TimeStamp的数据类型,可以判断是否数据有变更
.Net 函数:用于获取最新的单据号。
我写过通用的取单据号的方案,是一套完整的小系统,有时间可以QQ找我,我解释一下。QQ:9690746
--------------------编程问答--------------------
--存在当天第一条 记录 就返回,不存就就拼接 一下 返回--------------------编程问答--------------------
if exists( SELECT TOP 1 1 FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
CONVERT (varchar(6), GETDATE(), 112)) )
begin
SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC
end
else
begin
select CONVERT (varchar(6), GETDATE(), 112)) + '001'
end
--存在当天第一条 记录 就返回,不存就就拼接 一下 返回--------------------编程问答-------------------- 想知道您把这SQl语句写在什么地方,.aspx文件中,还是DateSet配置中? --------------------编程问答-------------------- 语句没错 --------------------编程问答-------------------- SELECT TOP 1 djbh FROM 表名 WHERE (year(djbh)=year(getdate()) and month(djbh)=month(getdate())) ORDER BY id DESC --------------------编程问答-------------------- 试下这条SQL吧。。。。。
if exists( SELECT TOP 1 1 FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
CONVERT (varchar(6), GETDATE(), 112)) )
begin
SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC
end
else
begin
select (CONVERT (varchar(6), GETDATE(), 112)) + '001' ) as djbh
end
select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM")
--------------------编程问答-------------------- 上面两位,好像都有些语法错误,但我不知道错在哪 --------------------编程问答--------------------
SELECT SUBSTRING(djbh, 1, 6)+Max(SUBSTRING(djbh, 7, 3)) FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC
这一年的这个月的最大单据编号 --------------------编程问答--------------------
你原来那句 是怎样放的,这句就是怎样放的 --------------------编程问答-------------------- 报什么错。。。??把错误信息说下
--------------------编程问答-------------------- up+1 --------------------编程问答--------------------
字符串转化为Datetime 时发生错误 --------------------编程问答--------------------
select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM")
[/Quote]
DateTime.Now.ToString("yyyyMM")无效
我是在DateSet中添加的sql语句 --------------------编程问答--------------------
报错:说id无效
--------------------编程问答-------------------- 虽然有点不礼貌,但是MAX(ID)都通不过的话.
还拿ID作比较的对像干嘛?
这是典型的表功能设计缺失.
我们都要引起注意. --------------------编程问答-------------------- Msg 8118, Level 16, State 1, Line 1
列 'st_cg.djbh' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
Msg 8126, Level 16, State 1, Line 1
列名 'st_cg.id' 在 ORDER BY 子句中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。 --------------------编程问答-------------------- string sql=string.Format(select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM"));
把sql 傳過去。。。
DateTime.Now.ToString("yyyyMM")无效
我是在DateSet中添加的sql语句
[/Quote]
补充:.NET技术 , C#