동적 SQL 문의 기본 구문
1: Exec을 사용하여 일반 SQL 문을 실행할 수 있습니다.
예: tableName에서 *를 선택하세요.
Exec('테이블 이름에서 * 선택')
Exec sp_executesql N'select * from tableName' -- 문자열 앞에 N을 추가해야 합니다.
2: 필드명, 테이블명, 데이터베이스명 등을 변수로 사용하는 경우 반드시 동적 SQL을 사용해야 한다.
예:
@fname varchar(20) 선언
@fname = 'FiledName' 설정
tableName에서 @fname 선택 - 오류, 오류 메시지가 표시되지 않지만 결과는 원하는 값이 아닌 고정된 FiledName 값입니다.
Exec('select ' + @fname + ' from tableName') -- 더하기 기호 앞뒤에 작은따옴표 주위에 공백이 있다는 점에 유의하세요.
물론 문자열을 변수 형태로 변경할 수도 있습니다.
@fname varchar(20) 선언
set @fname = 'FiledName' --필드 이름 설정
@s varchar(1000) 선언
set @s = 'tableName에서 ' + @fname + ' 선택'
임원(@s) - 성공
exec sp_executesql @s -- 이 문장은 오류를 보고합니다.
@s Nvarchar(1000) 선언 - nvarchar(1000)으로 변경됩니다.
set @s = 'tableName에서 ' + @fname + ' 선택'
임원(@s) - 성공
exec sp_executesql @s -- 이 문장은 맞습니다.
3. 출력 매개변수
@num int를 선언하고,
@sqls nvarchar(4000)
set @sqls='tableName에서 개수(*) 선택'
exec(@sqls)
--Exec 실행 결과를 변수에 어떻게 담나요?
@num int를 선언하고,
@sqls nvarchar(4000)
set @sqls='tableName에서 @a=count(*) 선택'
exec sp_executesql @sqls,N'@a int 출력',@num 출력
@num 선택
SQL 문 문자열에 작은따옴표 ''를 사용하려면 ''''를 사용할 수 있습니다.