高分求解,用sql语句能实现CRC8校验吗?

netxie 2007-03-27 11:50:47
能的话,是否能给出一个函数,急用,解决重赏!!!
...全文
233 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
elite2018 2007-03-28
  • 打赏
  • 举报
回复
嗯, 用C++ 写成扩展存储过程,在sql 里面调用即可.
dawugui 2007-03-27
  • 打赏
  • 举报
回复
校验插入指定结点是否导致编码循环的示例函数(邹老大)

CREATE FUNCTION f_CheckCode(
@ID char(3), --要插入的节点编码
@PID char(3) --要插入的节点的上级编码
)RETURNS bit
AS
BEGIN
DECLARE @t TABLE(ID char(3),Level int,Flag tinyint)
DECLARE @level int
SET @level=0
INSERT @t SELECT ID,@level,CASE WHEN ID=@PID THEN 1 ELSE 0 END
FROM tb
WHERE PID=@ID
WHILE @@ROWCOUNT>0
AND NOT EXISTS(SELECT * FROM @t WHERE Flag=1)
BEGIN
SET @level=@level+1
INSERT @t SELECT ID,@level,CASE WHEN ID=@PID THEN 1 ELSE 0 END
FROM tb a,@t b
WHERE a.PID=b.ID
AND b.Level=@level-1
END
RETURN((SELECT MAX(Flag) FROM @t))
END
w75251455 2007-03-27
  • 打赏
  • 举报
回复
UUUPPP
dawugui 2007-03-27
  • 打赏
  • 举报
回复
是这个吗?
校验表中数据是否有循环编码的通用存储过程(邹老大)

CREATE PROC p_VerifyData
@TableName sysname, --要校验树形数据的表
@CodeField sysname, --编码字段名
@ParentCodeField sysname --上级编码字段名
AS
SET NOCOUNT ON
--参数检查
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0
BEGIN
RAISERROR(N'"%s"不存在,或者不是用户表',1,16,@TableName)
RETURN
END
IF NOT EXISTS(SELECT * FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@TableName) AND name=@CodeField)
BEGIN
RAISERROR(N'列"%s"在用户表"%s"中不存在',1,16,@CodeField,@TableName)
RETURN
END
IF NOT EXISTS(SELECT * FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@TableName) AND name=@ParentCodeField)
BEGIN
RAISERROR(N'列"%s"在用户表"%s"中不存在',1,16,@ParentCodeField,@TableName)
RETURN
END
SELECT @TableName=QUOTENAME(@TableName),
@CodeField=QUOTENAME(@CodeField),
@ParentCodeField=QUOTENAME(@ParentCodeField)

--数据检查
EXEC(N'
--检查导致循环的节点
DECLARE @Level int
SET @Level=1
SELECT ID,PID,Path=CAST(ID as varchar(8000)),Level=@Level
INTO # FROM(--列出所有父节点不是根节点的数据(使用子查询是防止编码列为IDENTITY列时,导致后面的插入处理出错)
SELECT ID=a.'+@CodeField+N',PID=a.'+@ParentCodeField+N'
FROM '+@TableName+N' a,'+@TableName+N' b
WHERE a.'+@ParentCodeField+N'=b.'+@CodeField+N'
AND b.'+@ParentCodeField+N' IS NOT NULL)a
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT # SELECT a.'+@CodeField+N',b.PID,
CAST(a.'+@CodeField+N' as varchar(8000))+''>''+b.Path,@Level
FROM '+@TableName+N' a,# b
WHERE a.'+@ParentCodeField+N'=b.ID
AND b.Level=@Level-1
AND b.ID<>b.PID
END

--显示结果
SELECT '+@CodeField+N',Description=N''父节点无效''
FROM '+@TableName+N' a
WHERE '+@ParentCodeField+N' IS NOT NULL
AND NOT EXISTS(
SELECT * FROM '+@TableName+N'
WHERE '+@CodeField+N'=a.'+@ParentCodeField+N')
UNION ALL --显示产生循环的节点
SELECT ID,N''循环:''+Path+''>''+CAST(ID as varchar(8000))
FROM # WHERE ID=PID
')

netxie 2007-03-27
  • 打赏
  • 举报
回复
帮顶也重谢
netxie 2007-03-27
  • 打赏
  • 举报
回复
CRC就是块数据的计算值,它的全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”,“CRC校验”就是“循环冗余校验”。
free_pop2k 2007-03-27
  • 打赏
  • 举报
回复
还是在学校时学的CRC,现在忘记了,可要复习一下
xshsoft 2007-03-27
  • 打赏
  • 举报
回复
最好是写成扩展存储过程,很抱歉,具体的方法就不清楚了。查一下相关资料吧。
CathySun118 2007-03-27
  • 打赏
  • 举报
回复
这种东西在业务层做比较好,sql做比较麻烦。lz出于什么考虑呢?
要不lz写个扩展存储过程好了
netxie 2007-03-27
  • 打赏
  • 举报
回复
dawugui(潇洒老乌龟),我要的结果是对字符串进行CRC后的值
netxie 2007-03-27
  • 打赏
  • 举报
回复
C语言如下

/***********************************************************************************
crc 校验
***********************************************************************************/
uchar CrcProc(uchar *buf,uchar count)
{
uchar crc,i,j,temdata,shdata;
bit carry,oldcarry;
crc=0;
for(i=0;i<count;i++)
{
temdata=*buf;
shdata=temdata;
for(j=0;j<8;j++)
{
temdata=temdata ^crc;
carry=(temdata&1)==1;
if (carry)
{
crc=crc^0x18;
}
oldcarry=carry;
crc=crc>>1;
if(oldcarry)
{
crc=crc|0x80;
}
temdata=shdata;
if((temdata&1)==1)
{
temdata=(temdata>>1)|0x80;
}
else
{
temdata=temdata>>1;
}
shdata=temdata;
}
buf++;
}
return(crc);
}

哪位大侠帮写成sql,封成函数

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧