- 论坛徽章:
- 1
|
想创建一个函数,从一个表中返回符合某一条件的值?
CREATE Function MakeFram
(
@Fram_ST1 VarChar(10), --帧起始位1
@Fram_ST2 VarChar(10), --帧起始位2
@Fram_Len1 VarChar(10), --帧起长度
@Fram_Len2 VarChar(10), --帧起长度
@Fram_Contrl VarChar(10), --帧控制位
@Fram_Area VarChar(10), --行政区代码
@Fram_DT VarChar(10), --终端地址
@Fram_Server VarChar(10), --服务器地址
@Fram_Fun VarChar(10), --功能码
@Fram_Pos VarChar(10), --帧位置
@Fram_DataArea VarChar(1000), --数据区域
@Fram_Time VarChar(50), --时标
@Fram_CS Varchar(10), --帧效验
@Fram_End Varchar(10) --帧结束
) Returns Varchar(2000) --帧
Begin
Declare @Tp_Len3 Int
Declare @Tp_Result Int
Declare @Tp_Len4 Varchar(1000)
Declare @Tp_Len5 Varchar(1000)
Declare @Tp_Str Varchar(1000)
Declare @Tp_Str1 Varchar(1000)
Declare @Fram_Str Varchar(2000)
Set @Tp_Len3=0
Set @Tp_Len4=''
Set @Fram_Str=''
Set @Tp_Str=''
Set @Tp_Str1=''
Set @Tp_Result=0
Set @Fram_Str=''
Set @Tp_Len5=''
--得到帧
Select @Tp_Str=@Fram_Contrl+@Fram_Area+@Fram_DT+@Fram_Server+@Fram_Fun+@Fram_Pos+@Fram_DataArea+@Fram_Time
--得到帧的长度16进制
Select @Tp_Len3=Len(@Tp_Str)*2+1
Select @Tp_Len4=dbo.Convert10To16(@Tp_Len3)
Select @Tp_Len5=Case When Len(@Tp_Len4)=2 Then @Tp_Len4+'00'
When Len(@Tp_Len4)=4 Then SubString(@Tp_Len4,3,4)+SubString(@Tp_Len4,1,2) End
While @Tp_Str<>;''
Begin
Set @Tp_Str1=SubString(@Tp_Str,1,2)
Set @Tp_Result=@Tp_Result+dbo.Convert16To10(@Tp_Str1)
Set @Tp_Str=SubString(@Tp_Str,2,len(@Tp_Str))
End
--得到校验位
Select @Fram_CS=dbo.Convert10To16((@Tp_Result%256))
Select @Fram_Str=@Fram_ST1+@Tp_Len5+@Tp_Len5+@Fram_ST2+@Fram_Contrl+@Fram_Area+@Fram_DT+@Fram_Server+@Fram_Fun+@Fram_Pos+@Fram_DataArea+@Fram_Time+@Fram_CS+@Fram_End
Return(@Fram_Str)
End
其它语言写的,不知道是否可以得到提示。 |
|