2011-09-01 3 views
0

비즈니스 로직의 일부로 SQL 테이블에서 2000 개 이상의 행을 검색해야합니다. 복잡한, 절차 적 비즈니스 로직을 통해 이러한 행을 실행하십시오 (예, 절차 적이어야하며, 지금까지 연구 한 모든 실행중인 기술을 효율적으로 사용하지 않습니다). 그런 다음 데이터베이스를 업데이트하고 결과를 반환해야합니다.SQL CLR - 데이터 검색/결과 업데이트

SQLDataReader를 사용하여 - 데이터가 SQL에서 스트리밍되고 내 논리로 스트리밍됩니다. 올바르게 작동합니다.

로직이 데이터를 반복하고 필요한 변경을 수행합니다.

변경 사항을 저장하려면 - 실제로 매개 변수를 UPDATE 문에 채워서 결과를 보내지 않으려합니다. SQL에서 결과를 얻은 경우 임시 테이블을 기본 테이블과 조인하고 단일 TSQL Update 문에서 모든 업데이트를 수행합니다. 내 "테이블"에 의해 SQL CLR에 있고, 기본 테이블은 SQL 측면에서 끝났습니다.

결과를 XML로 직렬화하는 방법을 읽고 varchar 변수로 전체를 전송합니다.하지만 SQL Server 2008 R2를 사용하고 있습니다.

UDT 및 테이블 값 매개 변수를 살펴 보았지만 SQL CLR과 SQL간에 데이터를 전송할 수는 없습니다.

SQL CLR이 복잡한 비즈니스 논리와 함께 사용된다고 가정 할 경우 데이터를 전송하는 가장 좋은 방법이 없습니까? 나는이 문제를 직접적으로 다루거나 이야기하는 예를 아직 발견하지 못했다.

+0

SQL CLR은 DLL에 넣고 서버 내에서 실행되도록 설계되었습니다. – Nik

답변

1

한 번에 모든 열을 업데이트하려면 데이터베이스를 한 번 호출하면 다양한 레코드에서 XML을 사용할 수 있습니다. 사용할 수있는 쿼리의 샘플 아래.

if OBJECT_ID('sample1') is not null 
drop table sample1 
go 
create table sample1(id int identity(1,1), firstname varchar(100), lastname varchar(100)) 
go 

declare @xmldata xml 
set @xmldata = 
N'<sample> 
     <data> 
      <firstname>Jay</firstname> 
      <lastname>Keni</lastname> 
     </data> 
     <data> 
      <firstname>Lid</firstname> 
      <lastname>kurtis</lastname> 
     </data> 
     <data> 
      <firstname>Lea</firstname> 
      <lastname>Cortez</lastname> 
     </data> 
</sample>' 


declare @xml_hndl int 
exec sp_xml_preparedocument @xml_hndl OUTPUT, @xmldata 

insert sample1(firstname, lastname) 
select up.firstname, up.lastname 
FROM OPENXML(@xml_hndl, '/sample/data',2) 
WITH (firstname varchar(100),lastname varchar(100))up 

EXEC sp_xml_removedocument @xml_hndl 

select * from sample1 

사용자가 할 수있는 모든 조인 작업으로 업데이트, 삽입, 삭제를 수행 할 수 있습니다.이 코드는 SQL Server 2005에서 데날리로 작동합니다.

+0

2008 년 FileStream을 사용하여 SQL CLR의 결과를 FileStream 객체로 스트리밍하려고 생각했습니다. 그런 다음 다른 저장 프로 시저를 사용하여 FileStream을 검색하고 (여하튼) TVF를 만들어 이진 결과를 행으로 검색합니다. XML이 마음에 들지만, 특히 큰 결과가있는 경우에는 매우 자세한 것으로 보입니다. – codeputer