다음을 통해 공유


sp_refreshsqlmodule(Transact-SQL)

새 설치: 2006년 12월 12일

지정된 스키마 바인딩되지 않은 저장 프로시저, 사용자 정의 함수 또는 뷰에 대한 메타데이터를 업데이트합니다. 기본 개체가 변경되면 매개 변수의 데이터 형식과 같은 이러한 개체의 영구 메타데이터가 최신 상태를 유지하지 못할 수 있습니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_refreshsqlmodule [ @name = ] 'module_name' 

인수

  • [ @name= ] 'module_name'
    저장 프로시저, 함수 또는 뷰의 이름입니다. module_name은 CLR(공용 언어 런타임) 저장 프로시저 또는 CLR 함수가 될 수 없습니다. module_name은 스키마에 바인딩될 수 없습니다. module_namenvarchar이며 기본값은 없습니다. module_name은 다중 부분 식별자가 될 수 있지만 현재 데이터베이스의 개체만 참조할 수 있습니다.

반환 코드 값

0(성공) 또는 0이 아닌 수(실패)

주의

저장 프로시저, 사용자 정의 함수 또는 뷰의 기반이 되는 개체에 대한 변경 내용이 해당 개체의 정의에 영향을 주면 sp_refreshsqlmodule을 실행해야 합니다. 그렇지 않으면 개체를 쿼리하거나 호출할 때 예기치 않은 결과가 발생할 수 있습니다. 뷰를 새로 고치려면 동일한 결과의 sp_refreshsqlmodule 또는 sp_refreshview를 사용합니다.

sp_refreshsqlmodule은 개체와 연관되어 있는 모든 사용 권한, 확장 속성 또는 SET 옵션에 영향을 주지 않습니다.

sp_refreshsqlmodule을 실행하면 개체와 연관되어 있는 모든 서명이 삭제됩니다.

사용 권한

저장 프로시저, 함수 또는 뷰에 대한 ALTER 권한이 필요하고 개체가 참조하는 CLR 사용자 정의 형식 및 XML 스키마 컬렉션에 대한 REFERENCES 권한이 필요합니다.

또한 EXECUTE AS 절로 정의되는 모듈의 경우 지정된 보안 주체에 대해 IMPERSONATE 권한이 필요합니다. 일반적으로 모듈이 EXECUTE AS USER로 정의되었으며 보안 주체의 사용자 이름이 이제 모듈이 만들어진 때의 사용자와 다른 사용자로 확인되지 않는 이상 개체를 새로 고치는 경우 해당 EXECUTE AS 보안 주체가 변경되지 않습니다.

다음 예에서는 사용자 정의 함수를 새로 고칩니다. 이 예에서는 별칭 데이터 형식인 mytypemytype을 사용하는 사용자 정의 함수 to_upper를 만듭니다. 그런 다음 mytype의 이름을 myoldtype으로 바꾸고 다른 정의가 있는 새 mytype을 만듭니다. to_upper 함수를 새로 고치면 이전 항목 대신 새로 구현된 mytype이 참조됩니다.

-- Create an alias type.
USE AdventureWorks;
GO
IF EXISTS (SELECT 'mytype' FROM sys.types WHERE name = 'mytype')
DROP TYPE mytype;
GO

CREATE TYPE mytype FROM nvarchar(5);
GO

IF OBJECT_ID ('to_upper', 'FN') IS NOT NULL
DROP FUNCTION to_upper;
GO

CREATE FUNCTION to_upper (@a mytype)
RETURNS mytype
WITH ENCRYPTION
AS
BEGIN
RETURN upper(@a)
END;
GO

SELECT dbo.to_upper('abcde');
GO

-- Increase the length of the alias type.
sp_rename 'mytype', 'myoldtype', 'userdatatype';
GO

CREATE TYPE mytype FROM nvarchar(10);
GO

-- The function parameter still uses the old type.
SELECT name, type_name(user_type_id) 
FROM sys.parameters 
WHERE object_id = OBJECT_ID('dbo.to_upper');
GO

SELECT dbo.to_upper('abcdefgh'); -- Fails because of truncation
GO

-- Refresh the function to bind to the renamed type.
EXEC sys.sp_refreshsqlmodule 'dbo.to_upper';

-- The function parameters are now bound to the correct type and the statement works correctly.
SELECT name, type_name(user_type_id) FROM sys.parameters
WHERE object_id = OBJECT_ID('dbo.to_upper');
GO

SELECT dbo.to_upper('abcdefgh');
GO

참고 항목

참조

sp_refreshview(Transact-SQL)
데이터베이스 엔진 저장 프로시저(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기