kap*_*mom 4 sql t-sql 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
Run Code Online (Sandbox Code Playgroud)
产生(这次):16-37-30
我需要为插入表中的每个记录获取此字符串.
现在我想把它包装成一个函数,但显然我不能在UDF中使用RAND().
如何在使用insert语句时将其包装为call?
您可以通过两个步骤完成此操作.
首先,创建一个视图来生成随机数:
CREATE VIEW vRandNumber
AS
SELECT RAND() as RandNumber
Run Code Online (Sandbox Code Playgroud)
其次,创建您UDF从视图中拉出:
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
Run Code Online (Sandbox Code Playgroud)
这将返回您刚才要求的价值.然后当你想要你的价值时,你会得到你的随机答案:
SELECT dbo.udfTest()
Run Code Online (Sandbox Code Playgroud)
要么
INSERT INTO yourTable
(
randNumber
)
SELECT dbo.udfTest()
Run Code Online (Sandbox Code Playgroud)
我刚刚在sql server 2005中对它进行了测试,但它确实有效.
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |