다양한 입력을 처리 할 수 있도록 동적으로 만들려는 저장 프로 시저가 있습니다. 다음을 제외한 대부분의 동적 절차를 알아 냈습니다.SQL Server : 동적으로 변수를 삽입하는 방법 Select
동적 절차에서이 부품을 사용하려면 어떻게 작성해야합니까? 각 변수 다음에 '+
을 앞에두고 +'
을 넣어야합니까?
INSERT INTO @temp
(
dateRange
)
SELECT @date0
UNION ALL
SELECT @date1
UNION ALL
SELECT @date2
UNION ALL
SELECT @date3
UNION ALL
SELECT @date4
UNION ALL
SELECT @date5
편집 : 전체 쿼리와 참고하시기 바랍니다. 이 동적 인 작업을하기 전에 올바르게 작동하고 있으므로 여기에 누락되거나 불필요한 따옴표가 있거나 다른 글쓰기 실수가 있습니다. 또한 마지막 중첩 쿼리의 Where 조건이 동적으로 작성된 것인지 확실하지 않습니다.
ALTER PROCEDURE [dbo].[FetchHistoryCombined]
@selection nvarchar(100),
@date0 nvarchar(20),
@date1 nvarchar(20),
@date2 nvarchar(20),
@date3 nvarchar(20),
@date4 nvarchar(20),
@date5 nvarchar(20)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
DECLARE @sql nvarchar(max)
SET @sql = N' DECLARE @temp AS TABLE
(
dateRange nvarchar(20)
)
DECLARE @temp2 AS TABLE
(
ranking int,
item nvarchar(100),
volume int
)
INSERT INTO @temp
(
dateRange
)
SELECT ' + @date0 + '
UNION ALL
SELECT ' + @date1 + '
UNION ALL
SELECT ' + @date2 + '
UNION ALL
SELECT ' + @date3 + '
UNION ALL
SELECT ' + @date4 + '
UNION ALL
SELECT ' + @date5 + '
INSERT INTO @temp2
(
ranking,
item,
volume
)
SELECT Top 10 RANK() OVER(ORDER BY COUNT(*) desc, ' + @selection + ') [Rank],
' + @selection + ',
COUNT(*) AS volume
FROM LogEsc
WHERE dateEsc LIKE ''' + @date0 + '%''
AND EID LIKE ''PE%''
GROUP BY ' + @selection + '
ORDER BY volume desc, ' + @selection + '
SELECT
(
SELECT A.item
FROM @temp2 A
ORDER BY A.ranking, A.item
FOR XML PATH(''''), ELEMENTS, TYPE
) AS top10,
(
SELECT B.dateRange,
(
SELECT C.item,
(
SELECT COUNT(*) AS volume
FROM LogEsc D
WHERE D.' + @selection + ' = C.item
AND D.EID LIKE ''PE%''
AND D.dateEsc LIKE B.dateRange + ''%''
FOR XML PATH(''''), ELEMENTS, TYPE
)
FROM @temp2 C
ORDER BY C.ranking, C.item
FOR XML PATH(''''), ELEMENTS, TYPE
) AS [dateRange/items]
FROM @temp B
FOR XML PATH(''''), ELEMENTS, TYPE
) AS history
FOR XML PATH(''ranking''), ELEMENTS, TYPE, ROOT(''ranks'')'
EXEC(@sql)
END
END
미리 감사드립니다. Mike.
동적 SQL은 쿼리를 문자열에 넣은 다음 실행하는 것을 말합니다. 검색어가 문자열에 없습니다. –
감사합니다. 이것은 전체 쿼리가 아니라 문자열에있는 것입니다. 나는이 부분을 어떻게 처리해야할지 모른다. – Mike
대답하기가 쉽기 때문에 전체 쿼리를 추가했습니다. – Mike