SP_EXECUTESQL

T-SQL

구문

sp_executesql [ @stmt = ] stmt
[ 
    {, [@params=] N'@parameter_name data_type [ OUT | OUTPUT ][,...n]' } 
    {, [ @param1 = ] 'value1' [ ,...n ] }
]

인수

[ @stmt = ] stmt

Transact-SQL 문 또는 일괄 처리를 포함한 유니코드 문자열입니다.
stmt는 유니코드 상수 또는 유니코드 변수여야 합니다.
+ 연산자로 두 문자열을 연결한 식처럼 더 복잡한 유니코드 식은 사용할 수 없습니다.
문자 상수도 사용할 수 없습니다.
유니코드 상수를 지정한 경우 접두사 N으로 시작해야 합니다.
예를 들어 유니코드 상수 N’sp_who’는 유효하지만 ‘sp_who’는 그렇지 않습니다.
문자열의 크기는 사용 가능한 데이터베이스 서버 메모리의 용량에 따라서만 제한됩니다.
64비트 서버에서는 문자열 크기가 nvarchar(max)의 최대 크기인 2GB로 제한됩니다.
stmt에 포함된 각 매개 변수에는 @params 매개 변수 정의 목록과 매개 변수 값 목록 모두에
해당되는 항목이 있어야 합니다.

[ @params = ] N’@parameter_name data_type [ ,… n ]’

stmt에 포함된 모든 매개 변수의 정의를 포함하는 하나의 문자열입니다.
문자열은 유니코드 상수 또는 유니코드 변수여야 합니다.
각 매개 변수의 정의는 매개 변수 이름과 데이터 형식으로 구성됩니다.
n은 추가 매개 변수 정의를 나타내는 자리 표시자입니다.
stmt에 지정된 모든 매개 변수는 반드시 @params에 정의되어야 합니다.
stmt의 Transact-SQL 문 또는 일괄 처리에 매개 변수가 없으면 @params가 필요하지 않습니다.
이 매개 변수의 기본값은 NULL입니다.

[ @param1 = ] ‘value1’

매개 변수 문자열에 정의된 첫 번째 매개 변수의 값입니다.
값은 유니코드 상수 또는 유니코드 변수가 될 수 있습니다.
stmt에 포함된 모든 매개 변수에 대해 제공되는 매개 변수 값이 있어야 합니다.
stmt의 Transact-SQL 문 또는 일괄 처리에 매개 변수가 없으면 값이 필요하지 않습니다.

[ OUT | OUTPUT ]

매개 변수가 출력 매개 변수임을 나타냅니다.
프로시저가 CLR(공용 언어 런타임) 프로시저가 아닐 경우 text, ntext 및 image 매개 변수를 OUTPUT 매개 변수로 사용할 수 있습니다.
프로시저가 CLR 프로시저가 아닐 경우 OUTPUT 키워드를 사용하는 출력 매개 변수가
커서 자리 표시자일 수 있습니다.

n

추가 매개 변수의 값에 대한 자리 표시자입니다.
값은 상수 또는 변수만 가능합니다.
함수 또는 연산자를 사용하여 작성한 식처럼 더 복잡한 식은 값으로 사용할 수 없습니다.

반환 값

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

결과집합

작성된 모든 SQL 문에서 SQL 문자열로 결과 집합을 반환합니다.

주의

sp_executesql은 일괄 처리, 이름의 범위 및 데이터베이스 컨텍스트 면에서 EXECUTE와 동작이 동일합니다.

sp_executesql stmt 매개 변수의 Transact-SQL 문 또는 일괄 처리는 sp_executesql 문이 실행된 후에 컴파일됩니다.

stmt의 내용은 sp_executesql이라는 일괄 처리의 실행 계획과 별도로 컴파일되고 실행됩니다.

sp_executesql 일괄 처리는 sp_executesql을 호출하는 일괄 처리에서 선언된 변수를 참조할 수 없습니다.

sp_executesql 일괄 처리의 로컬 커서 또는 변수는 sp_executesql을 호출하는 일괄 처리에 노출되지 않습니다.

데이터베이스 컨텍스트의 변경 내용은 sp_executesql 문이 종료될 때까지만 지속됩니다.

문에 대한 매개 변수 값의 변경 내용이 변형뿐인 경우 저장 프로시저 대신 sp_executesql을 사용하여 Transact-SQL 문을 여러 번 실행할 수 있습니다.

Transact-SQL 문 자체는 달라지지 않고 매개 변수 값만 달라지므로 SQL Server 쿼리 최적화 프로그램은 처음 실행할 때 생성되는 실행 계획을 다시 사용합니다.

declare @sql                nvarchar(max),
        @tablename          nvarchar(500),
        @schemaname         nvarchar(500),
        @paramDefinition    nvarchar(500)

set     @tablename = '테이블명'
set     @schemaname = '스키마명'
set     @paramDefinition = N'@t nvarchar(500), @s nvarchar(500)'

set     @sql = N'   select      t.name 
                    from        sys.tables t 
                    join        sys.schemas s
                    on          t.schema_id = s.schema_id
                    where       t.name like ''%'' + @t + ''%''
                    and         s.name like ''%'' + @s + ''%'''
-- print @sql

exec sp_executesql  @sql, @paramDefinition, @t = @tablename, @s = @schemaname

참조링크