2011-09-08 10 views
2

모든 NULL 값을 가진 열이 포함 된 테이블이 있습니다. 이 열을 주어진 숫자 세트에서 임의의 숫자로 채우고 싶습니다.SQL에서 숫자 집합에서 임의의 숫자를 선택하는 방법

주어진 숫자 세트는 다른 테이블에서이 숫자를 선택하는 SELECT 문에서 생성됩니다.

예컨대 :이 2008 MSSQL을 사용하여 수행 할 어떻게

UPDATE tableA 
SET someColumnName = SomeRandomNumberFromSet(SELECT number from tb_Numbers) 

?

+0

중복 가능성을 허용 하시겠습니까? 즉 각각의 someColumnName은 tb_Numbers에서 임의의 "pick"을 수행합니까? 또한 인접한 숫자는 완전히 임의적입니다. –

+0

@ Martin Smith : 예, 복제본을 사용할 수 있습니다. – Draco

+0

세트에 몇 개의 번호가 있습니까? 업데이트 할 행 수는 얼마입니까? 숫자 테이블에 일련 번호 열을 추가하여 해당 범위의 난수를 생성하고 'newid()'에 의해 반복적으로 주문할 필요없이 특정 일치하는 행을 검색 할 수 있습니까? –

답변

4

다음은 특별히 효율적이지 않지만 작동합니다. 뷰는 "함수 내에서 부작용 연산자 'newid'를 잘못 사용해야합니다." 오류. UDF는 비 결정적이라고 가정되므로 각 행에 대해 항상 다시 평가됩니다.

이렇게하면 SQL Server가 스풀을 계획에 추가하고 이전 결과를 재생하는 데 문제가 발생하지 않습니다.

업데이트 할 행 수가 많은 경우 (또는 집합의 수가 많은 경우)이 메서드를 사용하지 않을 것입니다.

CREATE VIEW dbo.OneNumber 
AS 
SELECT TOP 1 number 
      FROM master..spt_values 
      ORDER BY NEWID() 

GO 

CREATE FUNCTION dbo.PickNumber() 
RETURNS int 
AS 
BEGIN 
    RETURN (SELECT number FROM dbo.OneNumber) 
END 

GO 

DECLARE @tableA TABLE (someColumnName INTEGER) 
INSERT INTO @tableA VALUES (2), (2), (2), (2), (2) 

UPDATE @tableA 
SET  someColumnName = dbo.PickNumber() 

SELECT * FROM @tableA 
0

전 비슷한 question을 오래 전에 사용해 보았습니다. 몇 가지 옵션이 있습니다.


는 1부터 n까지 임의의 숫자를 생성 할 수 있습니다되면, 당신은 당신의 목록에서 X 번째의 IREM을 선택하는 데 사용할 수 있습니다

Is this a good or bad way of generating random numbers for each record?. 가장 쉬운 방법은 합법적 인 값 집합에 순차적 ID를 지정하는 것입니다.

관련 문제