2010-01-11 3 views
1

현재 TSQL의 레지스트리에서 값을 가져오고 있습니다. 그러나 DigitalProductId를 가져와야하고 필요한 값이 반환되지 않습니다. 나는 그것이 레지스트리에 바이너리로 저장되어 있다고 생각한다.TSQL을 통해 레지스트리에서 DigitalProductId를 가져 오는 방법

아이디어가 있으십니까?

DECLARE @retvalue int, @data varchar(500) 
EXECUTE @retvalue = master.dbo.xp_instance_regread 'HKEY_LOCAL_MACHINE', 
'SOFTWARE\Microsoft\Windows NT\CurrentVersion', 
'DigitalProductId', @param = @data OUTPUT 
PRINT 'ProductId: '+ @data 

편집 : 내가 질문하고 코드를 업데이트했다.

+1

나를 위해 작동합니다. 뭐하고 있니? 빈? 오류? –

+1

나를 위해 또한 작동합니다. 한 인스턴스, 모든 인스턴스, 한 클라이언트, 모든 클라이언트에서 실패합니까? "작동하지 않는 것 같다"는 것보다 좀 더 구체적인 것은 도움이 될 것입니다. –

+0

질문을 약간 업데이트했으며 코드에 "DigitalProductId"가 포함되었습니다. – Coolcoder

답변

0

DigitalProductIdREG_BINARY입니다.

xp_instance_regread은 문자열을 모두 NULL 종료 문자열로 변환하므로 문자열에 NULLs이 포함되어 있으면 의미있는 결과를 반환하지 않습니다.

xp_instance_regread은 프로덕션 환경에서 사용하기위한 것이 아닌 문서화되지 않은 절차입니다. SQL Server 님의 쪽에서 레지스트리 키를 읽어야하는 경우 자신의 XP을 작성하는 것이 좋습니다.

+0

그래서 표시 가능한 값으로 CAST 할 수 있습니까? DigitalProductId는 레지스트리에서 올바르게 추출 할 때 PWK9P-6GFTM-792RH-JDM92-TXV9E와 유사합니다. – Coolcoder

+0

Express Edition을 포함한 모든 버전의 SQL (2000, 2005, 2008)에서 작동해야합니다. 이 proc은 내장되어 있으며 CLR proc이 개발되어 최소 2005 및 clr을 사전 요구 사항으로 사용하도록 요구하지 않는 한 다른 방법을 사용할 수 있다고 생각하지 않았습니다. – Coolcoder

+0

'@ Coolcoder' :'XP'는 'SQL 서버'가'VARCHAR'로 변환 한 데이터에 대한 포인터를 반환합니다 (XP에서 예상 한 바에 따라). 데이터에는 문자열 분리 기호로 취급되는 두 개의 0이 포함되며 문자열은이 문자열에서 잘립니다. 따라서 레지스트리 값이 'SQL Server'에 도달하면 첫 번째 0 이후의 모든 값은 복구 할 수 없게됩니다. – Quassnoi

관련 문제