CJ及各位用SQL SERVER,SYBASE的师傅们请进(100分)

  • 主题发起人 主题发起人 王寒松
  • 开始时间 开始时间

王寒松

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个计数表count,用来保存另一个表 tbl_a 的 ID序号
(另一个表没有用IDENTITY字段)

每次我写tbl_a的时候都要 到计数表里去找当前的记录序号到多少
找到后, 将它转换为 '199906290001' 这样的字符格式保存起来
其中前八位是当前日期,后四位是找到的序号变换为字符串后的样子

现在我先查ID号, 查完后返回到CLIENT 再进行变换为 '199906290001'
这样地字符串
请问各位,在SERVER 端存储过程里有没有办法实现这样的操作


 
badegg Wang睡醒了?又爬到榜首了!
我想应该可以,不过要到明天,在单位里试过后再给具体存储过程。不然让你笑话。

没有多少分,借用此地讨教一下Database的Keepconnection属性,设置成True好,
还是False好?设置成True,总有一个进程在,怕消耗服务器资源,设置成False又怕
频繁连接,影响速度。如何是好?


 
wgzhang:又要马儿跑,又要马儿不吃草。
王坏人:怎么点名呀?我吓死了:-O
我对客户端比较熟,服务器端要试了才知道。你是不是要这样的东西:
formatdatetime('yymmdd',now)+inttostr(DB2.FILED.asinteger + 1)?
 
老张: 记得 每一个 SQL SERVER CLIENT 连接上去要用40K内存
这不包括打开的查询占用的资源。 在现在内存巨大的服务器情况下
不建议你将 DATABASE CONNECT设置为FALSE, 但是应该在QUERY不用的
时候尽量关掉QUERY,节省SERVER端内存占用
 
王坏人:关了还连着的
 
补充:如果为TRUE
 
CJ,是吗? 我没做过测试,只是主观臆断了
如果CONNECTED=FALSE了后,还连着
那 登陆和连接岂不是根本就没有意义,

除非FREE了DATABASE控件才能释放掉吗?


客户端做那字符串应该是 formatdatetime('yyyymmdd',now)
+ format('%0.4d',) i 为SERVER上取下来的ID)

我现在想把这些操作在SERVER上一次完成, 这样就省去SERVER和CLIENT的交互

现在我是这么做的, 在 CLIENT端 取得ID 后,format('0.4d',[id]) 变换为
'0003' 这样的字串,然后和其他要POST的数据发到SERVER里
在SERVER上存储过程里
convert(char(8),getdate(),112) + @ID
因为客户端的时间有可能是不正确的,所以要在SERVER端完成这样的操作

我现在就是想把 变换 3 为‘0003’这样的操作在存储过程里做

 
这样的拆合毫无意义.
 
总算完工了,化了整整一个小时,王坏人,是不是在出考题?我不信你不会,剥削劳动力吧?
为了系统的安全,名称是乱取的,自己改改.

CREATE PROCEDURE TempGet (
@SerialNo Char(12) OUTPUT
) AS
DECLARE @dtLastday DateTime ,
@ID INT
BEGIN
Select @dtLastday = (select Mydate from MyTemp)
Select @ID = (select Serial from MyTemp)
IF CONVERT(char(8), @dtLastday,112) = CONVERT(char(8), GETDATE(), 112)
BEGIN
SELECT @SerialNo = CONVERT(char(8), @dtLastday,112) + CONVERT(char(4),@ID)
Update MyTemp Set Serial=Serial+1
END
ELSE
BEGIN
SELECT @SerialNo = CONVERT(char(8), GetDate(),112) + '0001' Update MyTemp Set MyDate=GetDate(),Serial=2
END
END
GO

procedure TForm1.Button1Click(Sender: TObject);
begin
StoredProc1.Prepare;
StoredProc1.ExecProc;
Edit1.Text:=StoredProc1.ParamByName('@SerialNo').AsString;
StoredProc1.UnPrepare;
end;
 
再说明一下,记录流水号的表有两个字段,一个记录日期,一个记录ID,因为到了新的
一天又要从1开始.另外一句Update语句拖到后面去了.
谢谢各位大虾对我"占地"问题的回答,不过还不够过瘾.还望多多指教.
 
突然发现一个小问题,后4位的0没加上,改一改
SELECT @SerialNo = CONVERT(char(8), @dtLastday,112) + SUBSTRING(CONVERT(char(5),10000+@ID),2,4)
 
嘻嘻,是我脑筋死, 老张的办法可行 。接受答案了。

三人行,必有我师。
 
王坏人:看我的补充,我说了。这5分惭愧
 
后退
顶部