我有一张57行的表。我有下面的用户定义函数
Create alter FUNCTION [dbo]. [ufn_GenerateNewProductId]()
RETURNS nvarchar (MAX)
as
begin
declare @NewproductId nvarchar(MAX), @rowNum int
select @rowNum=ROW_NUMBER() over (order by ProductId) from Products;
set @rowNum=@rowNum+1+100;
set @NewproductId='P' + cast(@rowNum as nvarchar(MAX));
return @NewproductId;
end
当我按如下方式调用用户定义函数时,它在@product中的值为'p158':
declare @product nvarchar(max);
select @product= dbo.ufn_GenerateNewProductId();
print @product;
当我如下调用它时,它将返回值'p102'。
select dbo.ufn_GenerateNewProductId();
请帮助我理解为什么在这两种情况下行数()的行为不同。
2条答案
按热度按时间jc3wubiy1#
查询返回多行,因此未定义实际分配给标量变量的值。
看起来你真的想要
count(*)
:请注意,您可以跳过其中一个变量并直接计算新产品id:
d5vmydt92#
我怀疑您想生成一个新的产品id,其中id值比当前的产品数大一个。
如果是这样,你需要这样的逻辑:
如果删除了某些内容,您可能需要使用当前值并添加1:
我强烈建议您不要这样做——代码有并发性问题,而且比其他方法慢得多。就用一个
identity
列来定义id。