2017-09-19 7 views
1

2 열 QueryNameQuery이있는 테이블이 있습니다. 테이블의 Query 열에 저장된 쿼리를 실행하려고합니다.SQL Server 테이블의 열에 저장된 쿼리 실행

레코드 수가 0보다 많은 것을 표시하려면 querynamecount으로 출력해야합니다. 나는 다음과 같은 커서를 사용하고, 나는 rowcount를 표시 할 수 있었다 그러나 사람이 어떻게 QueryName 표시하는 날을 제안 해주십시오 : 내가 제대로 이해하면, 당신은 테이블에 두 개의 필드를 가지고 있지만 만

DECLARE @Sql NVARCHAR(MAX); 

DECLARE Cur CURSOR LOCAL FAST_FORWARD FOR 
    (SELECT Query 
    FROM VWLetterTYB) 

OPEN Cur 

FETCH NEXT FROM Cur INTO @Sql 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 
    --Exec sp_executesql @Sql 
    EXEC ('SELECT COUNT(*) AS Rowcounts FROM (' + @sql + ') AS t HAVING COUNT(*) > 0 ') 

    FETCH NEXT FROM Cur INTO @Sql 
END 

CLOSE Cur 
DEALLOCATE Cur; 
+1

여기서부터 시작하는 것이 좋습니다. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

은 쿼리 만 테이블 이름입니까? 그렇다면 문자열 리터럴로 select에 추가하십시오. – scsimon

+0

쿼리에서 CTE를 사용하면 어떻게됩니까? –

답변

0
DECLARE @Sql NVARCHAR(MAX); 

DECLARE Cur CURSOR LOCAL FAST_FORWARD FOR 
    (SELECT Query 
    FROM VWLetterTYB) 

OPEN Cur 

FETCH NEXT FROM Cur INTO @Sql 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 
    --Exec sp_executesql @Sql 
    EXEC ('SELECT [sql] = ''' + @Sql + ''', COUNT(*) AS Rowcounts FROM (' + @sql + ') AS t HAVING COUNT(*) > 0 ') 

    FETCH NEXT FROM Cur INTO @Sql 
END 

CLOSE Cur 
DEALLOCATE Cur; 
0

을 커서를 사용하여 하나를 얻을 수 있었다. 이 경우, 해결책은 간단합니다, 당신이 커서 (다른 변수에 각각)와 하나 개 이상의 값을 가져올 수 있습니다, 그럼 그냥 동적 SELECT에 그 값을 넣어 :

DECLARE @Sql NVARCHAR(MAX), @QueryName NVARCHAR(MAX); 

DECLARE Cur CURSOR LOCAL FAST_FORWARD FOR 
    (SELECT Query, QueryName 
    FROM VWLetterTYB) 

OPEN Cur 

-- variables are filled in the order used in the SELECT (first column to first variable, 
-- second column to second variable, etc.) 
FETCH NEXT FROM Cur INTO @Sql, @QueryName 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 
    -- when using single quotes inside a string you have to double it 
    EXEC ('SELECT '''+ @QueryName+''' AS QueryName, COUNT(*) AS Rowcounts FROM (' + @sql + ') AS t HAVING COUNT(*) > 0 ') 

    FETCH NEXT FROM Cur INTO @Sql, @QueryName 
END 

CLOSE Cur 
DEALLOCATE Cur; 
0

내가이 없습니다 대답이지만, 질문의 더 세련됨. 여기에있는 예는 저장된 SQL을 독립형 명령으로 사용하는 것입니다. 테이블 열에 저장된 SQL 스 니펫을 SELECT 목록의 항목으로 사용할 수 있습니까?

나는 코드/이름 조회 쌍 테이블이있는 상황이 있습니다. 대부분의 코드는 단일 이름으로 이어집니다. 그러나 뭔가를 결정하기 위해서는 논리를 적용해야합니다. 내 마스터 SQL 문에서 원활하게하고 싶습니다. 많은 스크립트에서 같은 조회 테이블의이 논리를 적용해야합니다. 필자는 각 스크립트에 복잡한 로직을 내장하거나 복잡한 저장 프로 시저를 유지하고 싶지 않습니다.