250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 문서
- 설정
- maven
- STS
- Eclipse
- Core Java
- Tomcat
- ubuntu
- Python
- MSSQL
- Open Source
- JavaScript
- error
- JDBC
- jpa
- AJAX
- Thymeleaf
- myBatis
- MySQL
- Docker
- Exception
- Source
- git
- 오픈소스
- SpringBoot
- oracle
- PostgreSQL
- IntelliJ
- spring
- Spring Boot
Archives
- Today
- Total
헤르메스 LIFE
[MSSQL] TYPE, 배열의 사용 본문
728x90
MSSQL 에서 컬럼의 TYPE 으로 배열을 사용할 수 있습니다.
CREATE TYPE TB_RETURN AS TABLE
(
COL1 VARCHAR(8),
COL2 INT,
COL3 VARCHAR(1),
COL4 NVARCHAR(100)
)
BEGIN
DECLARE @TB_RETURN AS TB_RETURN
INSERT INTO @TB_RETURN VALUES ('20210208', '116', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '117', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '118', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '119', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '120', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '121', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '122', 'E', N'테스트 입니다.')
SELECT *
FROM @TB_RETURN
END
MSSQL 프로시저에서 사용
--CREATE PROC PRC_RETURN_PROD_H2
ALTER PROC PRC_RETURN_PROD_H2
@TB_RETURN TB_RETURN READONLY
, @RESULT NVARCHAR(255) OUTPUT -- 결과
AS
BEGIN
SET NOCOUNT ON
BEGIN TRY
UPDATE IF_TABLE SET
COL3 = B.COL3
, COL4 = B.COL4
FROM @TB_RETURN B
WHERE IF_TABLE.COL1 = B.COL1
AND IF_TABLE.COL2 = B.COL2
SELECT @RESULT = 'S'
END TRY
BEGIN CATCH
SELECT @RESULT = ERROR_MESSAGE()
END CATCH
END
BEGIN
DECLARE @TB_RETURN AS TB_RETURN
DECLARE @RESULT NVARCHAR(255);
INSERT INTO @TB_RETURN VALUES ('20210208', '116', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '116', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '118', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '119', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '120', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '121', 'E', N'테스트 입니다.')
INSERT INTO @TB_RETURN VALUES ('20210208', '122', 'E', N'테스트 입니다.')
exec PRC_RETURN_PROD_H2 @TB_RETURN, @RESULT output;
select @RESULT;
END
TYPE 사용 시 치명적인 단점이....
사용된 TYPE 객체를 수정이 굉장히 힘듭니다.
DROP TYPE TB_RETURN -> 아래와 같은 오류 메시지가 리턴됩니다.
Cannot drop type 'TB_RETURN' because it is being referenced by object ...
SELECT s.name, o.name, def = OBJECT_DEFINITION(d.referencing_id)
FROM sys.sql_expression_dependencies AS d
INNER JOIN sys.objects AS o
ON d.referencing_id = o.[object_id]
INNER JOIN sys.schemas AS s
ON o.[schema_id] = s.[schema_id]
WHERE d.referenced_database_name IS NULL
--AND d.referenced_schema_name = N'dbo'
AND d.referenced_entity_name = N'TB_RETURN';
TB_RETURN 이 사용된 모든 PROCEDURE 등의 객체를 찾아서
삭제하고..
TB_RETURN 를 DROP 하고, 다시 생성하고...
다시 모든 PROCEDURE 등의 객체를 생성해야 하는... ㅠ.ㅠ
이것 말고 다른 방법은 없을까요..?
수정할 걸 생각해서 넉넉하게 공간을 잡아두는게 좋을 것 같습니다. ^^
728x90
'Database' 카테고리의 다른 글
[MSSQL] 프로시저 생성 / 실행 (0) | 2021.03.23 |
---|---|
[Database] INNER JOIN , OUTER JOIN (0) | 2021.03.22 |
[MSSQL] Lock 확인 / KILL 하기 (0) | 2021.01.27 |
[MSSQL] Multi UPDATE, 다중 UPDATE (2) | 2021.01.19 |
[MSSQL] 동적 임시테이블 생성 (0) | 2021.01.01 |