2013-08-20 2 views
1

SQL 저장 프로 시저에서 계산하는 데 사용하는 일부 상수를 데이터베이스에 저장해야한다는 요구 사항이 있습니다. 나는이 상수SQL 서버의 상수 값을 효율적으로 검색하는 방법

ConstantName(nvarchar)  Value(int) 

문제는 이러한 변수에 접근 할 필요가 많은 저장 프로 시저가 있다는 것입니다를 저장하는 테이블을 사용하고 난 분명히 중복되는, 그 저장 프로 시저에 모든 상수의 값을 검색 할 수 있습니다 작업. 거의 50 개의 상수가 있습니다. 나는 이것을하는 더 좋은 방법이 있어야한다고 생각하지만, 나는 그것을 모릅니다. 누군가 좋은 접근법을 제안 할 수 있습니까?

+1

코드가 TSQL로 제한되었거나 다른 것으로 불리는 저장 프로 시저입니까? 예 : .그물) ? –

+0

나는 SSIS에서 그들을 부르고있다. 또한 필요한 경우 나중 단계에서 변경하는 방법이 필요합니다. 그래서 DB에 저장해야합니다. – Pankaj

+0

또 다른 이유는 [왜 저장 프로 시저를 사용하는 것은 나쁜 생각입니다] (http://stackoverflow.com/questions/6368985/mysql-stored-procedures-use-them-or-not-to-use-them/6369030#6369030)) – Bohemian

답변

2

모든 SP를 통해 계산에 사용할 수 있습니다 그것과 함께 SELECT getConst("MyName")

+0

OP가 이미 테이블을 사용하고 있기 때문에 하드 코딩 된 값을 가진 UDF가 더 좋습니다. 나는 보통 스칼라 함수 내부에서 테이블 연산을 수행하는 것은 좋지 않다고 생각하지만, 상대적으로 작은 테이블 크기 때문에 이것은 괜찮을 것이다. –

+0

@ YuriyGalanter 나는 테이블이 작고 클러스터 된 인덱스로 키를 사용하면 밝게 빛나다해야합니다. –

+0

저장된 procs의 모든 변수에 대한 값을 얻는 것과 다른가? 즉 스칼라 함수 대신에 다음을 수행하면 어떻게 될까요? declare \ @value int; 모든 상수에 대해 name = 'Constant Name'인 @value = value from constant를 선택하십시오. – Pankaj

3

각 상수를 하드 코딩 된 값을 반환하는 스칼라 함수로 정의 할 수 있습니다.

CREATE FUNCTION getConst(@constName nvarchar(255)) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @Value int 
    SELECT @Value = Value FROM Constants WHERE ConstantName = @constName 
    RETURN @Value 
END 

과 전화 :

CREATE FUNCTION MY_INT_CONST() 
RETURNS INT 
AS 
BEGIN 
    RETURN 12345 
END 

그럼 당신은 당신은 "중복"일을 할 수있는 스칼라 값 함수를 만들 수

SELECT dbo.MY_INT_CONST() * 2 
관련 문제