2013-08-14 3 views
0

다른 문에서 제공하는 레코드의 결과 집합을 반복 실행하고 최종 결과를 하나의 단일 결과 집합으로 결합하는 저장 프로 시저를 작성하고 싶습니다. 누구든지이 접근 방법에 대해 조언 할 수 있습니까?T-SQL의 결과 집합을 통해 반복

예를 들어, 레코드들의 일반적인 집합을 통해 반복 :

SELECT DISTINCT referenced_schema_name + '.' + referenced_entity_name 
FROM sys.dm_sql_referenced_entities(@schm_obj,'OBJECT') 

파라미터 @schm_obj 단일 필드로 대체 될 :

SELECT sys.schemas.name + '.' + sys.objects.name as [schm_obj] 
FROM sys.objects 
INNER JOIN sys.schemas 
ON sys.objects.schema_id = sys.schemas.schema_id 
AND sys.schemas.name IN ('dbo') 

일반 쿼리가 각 레코드에 실행될 첫 번째 쿼리의 각 행에 반환 된 값. 결국 모든 결과를 결합하고 싶습니다. 모든 조언을 크게 주시면 감사하겠습니다.

답변

1

이렇게하려면 dyanmic sql을 수행해야합니다. 나는 당신이 테이블 함수를 보여주는 절차를 말하고있을 때 혼란 스럽다. 2012 년에 변경된 것이 동적 SQL을 수행 할 수 없다면 테이블 함수. 기본적으로 프로그래머블 오브젝트를 생성하고 싶다면 스키마 나 메타 디테일을 제공하는 데이터를 얻기 위해 사용할 수있는 오브젝트를 생성하고 싶다면 동적 인 프로 시저를 사용하여 얻은 것을 레이블링 한 다음 그 값을 부여하십시오. 그런 다음 이것을 테이블 변수에 삽입하고 반복하여 삽입하거나 삽입 할 수 있습니다.

create proc dbo.Dynaminizer 
    (
     @ObjName nvarchar(64) 
    ) 
as 

BEGIN 

    declare @SQL nvarchar(1024) 

    Select @SQL = 'Select ''' + @ObjName + ''' as Name, ' + @ObjName + ' from sys.tables' 

    EXECUTE sp_executesql @SQL 

END 


declare @temp table (name varchar(32), value varchar(128)) 

insert into @Temp 
exec Dynaminizer 'name' 

insert into @Temp 
exec Dynaminizer 'object_id' 

select * 
from @Temp 

UPDATE 그날 나중에 ....

당신은 단지 하나 개의 테이블에서 값을하려는 경우 또는 설정 한 다음 스키마와 이름 콤보를받는 함수에서 작업을 수행 한 후 또 다른이 방법. cte를 사용하여 사용자 지정 열을 만든 다음 해당 집합에있는 행 수에 대한 함수에서 해당 데이터 집합을 수행하기 위해 교차 적용을 수행합니다. 이것은 각 값에 대해 실행하고 결과를 게시하는 것처럼 함수를 평가합니다. 자신이 원하는 것을보다 구체적으로 제시하지 않으면 노조를 할 필요가 없습니다. 더 이상 취할 수 있으며 종속성을 인라인으로 (별도의 행과 반대) 원할 경우 데이터 집합을 자체와 다시 연관시킨 다음 xml 유형을 사용하여 종속성을 쉼표로 구분 된 목록으로 캐스팅 할 수 있습니다. 모두의

사용 예제 :

-- multi row example to show referencing relationships 
with procs as 
    (
    Select 
     schema_name(schema_id) + '.' + name as Name 
    from sys.procedures p 
    ) 
select 
    p.Name 
, referenced_schema_name + '.' + referenced_entity_name as Ref 
from procs p 
    cross apply sys.dm_sql_referenced_entities(p.Name,'OBJECT') 
; 

-- take it a step further and put relationships inside a single column 
with procs as 
    (
    Select 
     schema_name(schema_id) + '.' + name as Name 
    from sys.procedures p 
    ) 
, setup as 
    (
    select 
     p.Name 
    , referenced_schema_name + '.' + referenced_entity_name as Ref 
    from procs p 
     cross apply sys.dm_sql_referenced_entities(p.Name,'OBJECT') 
    ) 
Select distinct 
    Name 
, stuff(
     (
     select 
      ', ' + Ref 
     from setup x 
     where x.Name = m.Name 
     for xml path('') 
     ) 
     , 1, 2, '') as Dependencies 
from setup m 
+0

당신 반복하는, 테이블, 발동, 전망은? 당신은 '또 다른 기록'을 말하고 있습니다. 일종의 데이터 딕셔너리를 만들기 위해 모든 객체와 의존성을 반복하고 싶습니까? – djangojazz

+0

필자가 예제를 통해 추측 한대로 필자의 예제를 업데이트했는데, 반복문에서 'dm_sql_referenced_entities'를 사용하고 싶습니다. 샘플을 실행하고 사용자 정의 요구에 맞게 조정할 수 있기를 바랍니다. – djangojazz

관련 문제