2012-04-11 4 views
4

다음과 같이 서식이 지정된 문자열을 생성하려고합니다. 99-88-77 여기서 3 개의 2 자리 숫자가 임의로 생성됩니다.TSQL RAND() 문제

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 

(이 시간)을 생성합니다 : 작동

내 TSQL 16-37-30

나는 테이블에 삽입 된 모든 레코드에 대한이 문자열을 얻을 필요가있다.

이제 함수로 랩핑하고 싶습니다만, 분명히 UDF에서 RAND()를 사용할 수 없습니다.

삽입 문을 사용할 때 어떻게 호출 할 수 있습니까?

답변

5

두 단계로 처리 할 수 ​​있습니다.

먼저, 임의의 숫자를 생성하는 뷰를 생성 :

CREATE VIEW vRandNumber 
AS 
SELECT RAND() as RandNumber 

둘째,보기에서 끌어 당신의 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 

이 방금 요청하여 값을 반환합니다. 당신이 당신의 가치 당신의 단지 사용을 원하는 경우 다음 당신은 당신의 임의 답변을 얻을 것이다 : 난 그냥 SQL Server 2005에서이 테스트를

SELECT dbo.udfTest() 

또는

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

를하고는했다.

+0

+1() 문제를 해결하는 좋은 방법 – wickedone

+0

완벽한! 감사! – kaplooeymom