카테고리 없음

[SQL 서버 2008] 이름이 유효한 식별자가 아닙니다. 함수에 오류가 있습니다.

행복을전해요 2021. 1. 20. 19:46

여기에는 두 가지 문제가 있습니다. 먼저 동적 SQL을 실행하려면 명령문 변수를 괄호로 묶어야합니다 .

exec @Name함수 선언에서 에 괄호를 추가해야합니다 . 함수가 작성되지만 실행할 수는 없습니다.exec

그 교체 exec @Name와 함께exec (@Name)

두 개의 간단한 행을 시도하여이 오류를 쉽게 재현 할 수 있습니다 (ofc는 테이블과 db-name을 가지고있는 것으로 대체하십시오;).

DECLARE @statement VARCHAR(MAX) = 'SELECT * FROM [nana].dbo.Fruits'
exec @statement

이것은 똑같은 오류를 발생시켜야합니다. 그런 다음 ()주위에 추가 @statement하면 작동합니다.

두 번째 문제는 결정적이어야하기 때문에 함수에서 동적 SQL을 사용할 수 없다는 것입니다 ( 여기를보십시오 ).

이 문제를 해결하려면 해당 함수 동작을 저장 프로 시저로 다시 작성하고 작동해야합니다.).

함수를 프로 시저로 다시 작성하는 한 가지 방법은 다음과 같습니다 (데이터베이스 구조를 설정하지 않았기 때문에 예상되지 않음).

CREATE PROCEDURE spGetName @OrganisationID INT = NULL, @UserID INT = NULL, @ClientTypeID INT
AS
BEGIN
    DECLARE @Name VARCHAR(500)        
        DECLARE @dbName VARCHAR(500)            
            SET @dbName = (SELECT ClientDataBase FROM dbo.ClientType WHERE ClientTypeID = @ClientTypeID)
            
                SET @Name = 'select UserName from [' + @dbName + '].dbo.Users where UserID=' + CONVERT(VARCHAR, @UserID)  
                    exec(@Name)
                    END
                    GO
                    
-------------------

사용해보십시오

exec sp_executesql @statement



출처
https://stackoverflow.com/questions/22008859