【问题标题】:CHECKSUM_AGG(checksum()) returns stars (**********)CHECKSUM_AGG(checksum()) 返回星星 (**********)
【发布时间】:2017-07-26 08:35:34
【问题描述】:

我在打电话

id int ,
tableid int,
seid int,
ptid int,
VISID NVARCHAR(50),
Tname AS SYSNAME ,
ColumnValue NVARCHAR(50),
ColumnKey NVARCHAR(50),
@HashValue NVARCHAR(50) OUTPUT

select @HashValue = CHECKSUM_AGG(checksum(id,tableid, seid, ptid, VISID, Tname, ColumnKey, ColumnValue))  from #FDATA 

当#FDATA 包含:

17 3028 100 100003 SCRN form.LG_AE 320 InvInit

17 3028 100 100003 SCRN form.LG_AE 321 AuthIn

…………(共6行,数据相似,无空值)

它返回 **********

但是当#FDATA 包含:

17 3019 101 101001 SCRN form.LG_AE 320 InvInit

17 3019 101 101001 SCRN 表格.LG_AE 321 AUTHIn

……(共65行,数据相似,无空值)

它按预期返回一个整数

【问题讨论】:

  • 抱歉,您没有向我们提供足够的信息来重现您的问题,请提供一个至少完整的问题,包括表结构和足够的数据来显示您的问题。
  • 根据文档 (here) 它返回 int。变量@HashValue是什么类型的?
  • 声明@HashValue int
  • 当您选择@HashValue 时,它会返回星星吗?您能否提供更多信息(如果可能,可能提供完整数据)?
  • 我发现了类似的问题here。核实。您如何选择@HashValue?你要把它投给varchar吗?

标签: sql-server hash hashcode checksum


【解决方案1】:

根据this和cmets,函数STR返回*,因为存储在@HashValue变量中的数字超过了指定的长度(默认为10)。代替STR 使用CAST,例如:

PRINT CAST(@HashValue as varchar(20))

或者只打印值而不进行转换:

PRINT @HashValue

或使用函数STR,但带有长度参数:

PRINT STR(@HashValue,20)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多