日期:2014-05-17  浏览次数:20433 次

求一条语句,先谢谢大家
本来有个表Ha_Data,现在要在表中加上一个字段HaID格式为char(19),该字段使用下面函数插入,问题是以前表中的HaID字段怎么样一次性自动生成(表中还有一个日期型字段InDateTime,以前的HaID字段数据根据InDateTime字段自动生成)

还有下面的函数怎么样使用触发器做


ALTER FUNCTION [dbo].[Fun_Ha_HaID] (@lctime datetime)
RETURNS char(19)
AS
BEGIN

DECLARE @lcMaxid char(4)
DECLARE @lcSysDate char(14)
DECLARE @lcLsh varchar(4)

SELECT @lcMaxid=IsNull(Max(Right(HaID,4)),'0'),
@lcSysDate=replace(replace(replace(CONVERT(varchar, @lctime, 120 ),'-',''),' ',''),':','')
FROM Ha_Data
WHERE HaID LIKE replace(replace(replace(CONVERT(varchar, @lctime, 120 ),'-',''),' ',''),':','')+'%'

IF Convert(Int,@lcMaxid)=0
SELECT @lcLsh='1'
ELSE
SELECT @lcLsh=Ltrim(Rtrim(Convert(char(4),Convert(Int,@lcMaxid)+1)))

RETURN @lcSysDate+'-'+Replicate('0',4-Len(@lcLsh))+@lcLsh

END



------最佳解决方案--------------------
--查询下
select  dbo.Fun_Ha_HaID(InDateTime) from Ha_Data
--没问题后执行
update Ha_Data set HaID=dbo.Fun_Ha_HaID(InDateTime)

------其他解决方案--------------------
引用:
SQL code1234--查询下select  dbo.Fun_Ha_HaID(InDateTime) from Ha_Data--没问题后执行update Ha_Data set HaID=dbo.Fun_Ha_HaID(InDateTime)


这样不行的
------其他解决方案--------------------
呵呵做到了,还有使用触发器怎么实现呀

DECLARE @ID int SELECT @ID=176
WHILE @ID<10647
BEGIN
UPDATE Ha_Data SET HaID=dbo.Fun_Ha_HaID(InDateTime) WHERE id=@ID
SET @id=@id+1 
END