表
ID 自动增加
FeedBackID 计算列,dbo.GetFeedBackID(ID)
函数:dbo.GetFeedBackID实际上就是取ID的后9位(不足补0,然后逐位加,其和的个位数就是第10位
实际应用中,要求FeedBackID唯一,所以我就用此方法保证FeedBackID 唯一CREATE FUNCTION dbo.GetFeedBackID (@ID int)
RETURNS nvarchar(10) AS
...
return @FeedID
END平时查询对FeedBackID 较多,所以需要创建索引
创建索引一开始提示 创建对象失败,没有设置 ANSI_NULLs
我通过Set选项 Alter后,现在又报
'ACC_DATA_TABLE' 表
- 不能创建索引 'IX_ACC_DATA_TABLE'。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]无法创建索引,因为键列 'FeedBackID' 不具有确定性或不精确。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。请参阅前面的错误信息。
怎么解决,还是SQLSERVER根本不支持计算公式依赖于函数的?
ID 自动增加
FeedBackID 计算列,dbo.GetFeedBackID(ID)
函数:dbo.GetFeedBackID实际上就是取ID的后9位(不足补0,然后逐位加,其和的个位数就是第10位
实际应用中,要求FeedBackID唯一,所以我就用此方法保证FeedBackID 唯一CREATE FUNCTION dbo.GetFeedBackID (@ID int)
RETURNS nvarchar(10) AS
...
return @FeedID
END平时查询对FeedBackID 较多,所以需要创建索引
创建索引一开始提示 创建对象失败,没有设置 ANSI_NULLs
我通过Set选项 Alter后,现在又报
'ACC_DATA_TABLE' 表
- 不能创建索引 'IX_ACC_DATA_TABLE'。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]无法创建索引,因为键列 'FeedBackID' 不具有确定性或不精确。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。请参阅前面的错误信息。
怎么解决,还是SQLSERVER根本不支持计算公式依赖于函数的?
CREATE FUNCTION dbo.GetFeedBackID (@ID int)
RETURNS nvarchar(10) AS
BEGIN
declare @FeedID varchar(10)
declare @Checkval int
declare @Checkval_tmp int
declare @FLen int
set @FeedID = right('000000000'+rtrim(@ID),9)
set @Checkval = cast(left(@FeedID,1) as int)
set @FLen = len(@FeedID)
while @FLen>0
Begin
set @Checkval_tmp = cast(SubString(@FeedID,len(@FeedID)-@FLen+2,1) as int)
set @Checkval = @Checkval^@Checkval_tmp
set @FLen = @FLen-1
End
set @FeedID=rtrim(@FeedID)+ltrim(rtrim(str(@Checkval)))
return @FeedID
END
create table tb(id int ,col as right(1000000000+id,9) )
create unique index id_col on tb(col)
insert into tb values(1)
insert into tb values(11)
insert into tb values(111)
select * from tb
drop table tb