구문
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
참조링크
이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.