복붙노트

[SQL] 함수의 동적 SQL 전화

SQL

함수의 동적 SQL 전화

나는 테이블을 반환하는 함수를 쓰고 있어요. 복귀 테이블에 함수에 전달하고 쿼리가 내장되어 실행되고 삽입 된 두 개의 매개 변수가 있습니다. 그러나 나는이 오류가 발생하고있다.

이 간단한 유틸리티 함수이기 때문에 내가 저장 프로 시저를 사용하지 싶습니다. 이 작업을 수행 할 수있는 경우 사람의 노하우를 않습니다. 내 함수 아래 부호화되어, 그 특정 테이블 내의 특정 열의 속는 대해 체크한다.

-- =============================================
-- AUTHOR:      JON AIREY
-- THIS FUNCTION WILL RETURN A COUNT OF HOW MANY
-- TIMES A CERTAIN COLUMN VALUE APPEARS IN A 
-- TABLE. THIS IS HELPFUL FOR FINDING DUPES.

-- THIS FUNCTION WILL ACCEPT A COLUMN NAME, TABLE
-- NAME (MUST INCLUDE SCHEMA), AND OPTIONAL
-- DATABASE TO USE. RESULTS WILL BE RETURNED AS
-- A TABLE.
-- =============================================
ALTER FUNCTION [dbo].[fn_FindDupe]
(   
-- Add the parameters for the function here
@Column     VARCHAR(MAX), 
@Table      VARCHAR(100),
@Database   VARCHAR(100)    =   ''
)
RETURNS 
@TempTable TABLE 
        ([Column] varchar(100)
        ,[Count] int)
AS
BEGIN
    DECLARE @SQL VARCHAR(MAX)
    SET @Table =    CASE
                        WHEN @Database = ''
                        THEN @Table
                        ELSE @Database + '.' + @Table
                    END

    SET @SQL =

    '   
        INSERT INTO @TempTable

        SELECT      ' + @Column + ' 
                    ,COUNT(' + @Column + ') AS CNT
        FROM        ' + @Table + '
        GROUP BY    ' + @Column + '
        ORDER BY    CNT DESC
    '

    EXEC SP_EXECUTESQL @SQL

RETURN 
END
GO

해결법

  1. ==============================

    1.당신은 UDF에서 동적 SQL을 사용할 수 없습니다 :

    당신은 UDF에서 동적 SQL을 사용할 수 없습니다 :

  2. from https://stackoverflow.com/questions/9607935/call-dynamic-sql-from-function by cc-by-sa and MIT license