sql - TSQL RAND() 问题

标签 sql tsql random user-defined-functions

我正在尝试生成一个格式为:99-88-77 的字符串,其中三个 2 位数字是随机生成的。

我的 TSQL 有效:

declare @result nvarchar(50)
    DECLARE @counter smallint, @ci smallint, @cu smallint, @dc smallint

      SET @ci=RAND()*100
      SET @cu=RAND()*100
      SET @dc=RAND()*100

      --SET @counter = @counter + 1

   set @result = CAST(@ci AS varchar(2)) +'-'+CAST(@cu AS varchar(2))+'-'+CAST(@dc AS varchar(2))
   print @result

生产(这次):16-37-30

我需要为插入表中的每条记录获取此字符串。

现在我想把它包装成一个函数,但显然我不能在 UDF 中使用 RAND()。

使用插入语句时如何包装它以调用?

最佳答案

您可以分两步执行此操作。

首先,创建一个 View 来生成随机数:

CREATE VIEW vRandNumber
AS
SELECT RAND() as RandNumber

其次,创建您的 UDF从 View 中拉出:
CREATE FUNCTION dbo.udfTest
(
)
RETURNS nvarchar(50)
AS
BEGIN

    DECLARE @result  nvarchar(50)
    DECLARE @counter smallint, @ci smallint, @cu smallint, @dc smallint

    SET @ci=(SELECT RandNumber FROM vRandNumber)*100
    SET @cu=(SELECT RandNumber FROM vRandNumber)*100
    SET @dc=(SELECT RandNumber FROM vRandNumber)*100

    set @result = CAST(@ci AS varchar(2)) +'-'+CAST(@cu AS varchar(2))+'-'+CAST(@dc AS varchar(2))

RETURN @result
END

这将返回您刚刚请求的值。然后,当您想要自己的值(value)时,只需使用即可,您将得到随机答案:
SELECT dbo.udfTest()

或者
INSERT INTO yourTable 
(
    randNumber
)
SELECT dbo.udfTest()

我刚刚在 sql server 2005 中对此进行了测试,并且成功了。

关于sql - TSQL RAND() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114665/

相关文章:

Java 小程序未正确响应

sql - 如何立即终止/停止长 SQL 查询?

mysql - 如何获得链接到第三个表的两个表的总和

sql - 如何使用 T-SQL 将十六进制颜色转换为 RGB 颜色

c# - TSQL:生成人类可读的 ID

matlab - matlab中的微分一致性

php - 如何在有条件的情况下显示所有分组信息?

mysql - 如果另一列为空,则选择一列

mysql - 列的累积和不起作用

java - 使用 Bean 的随机数