database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6338 게시물 읽기
No. 6338
고수님들 도와주세요ㅜ
작성자
나야
작성일
2012-03-08 12:50ⓒ
2012-03-08 12:51ⓜ
조회수
7,364

dbspec이라는 테이블에서 값을 가져와서

while 문 사용해 트리거 생성 후 atrail테이블에 발생된 값을 넣는 문인데

*dbspec

1 DG scrno nvarchar(4) NULL
2 DG Initial nvarchar(3) NULL
3 SV scrno nvarchar(4) NULL
4 SV visit int NULL
5 SV vdt nvarchar(10) NULL
6 PI scrno nvarchar(4) NULL
7 PI visit int NULL
8 PI birth  nvarchar(10) NULL
9 PI gender int 1,2
10 PI ht nvarchar(3) NULL
11 PI wt nvarchar(5) NULL
 

*atrail

create table Atrail(

Scrno nvarchar(5),

visit int,

serial int,

tbl nvarchar(10),

col nvarchar(10),

input nvarchar(10),

entrytime nvarchar(20))

 

declare @e nvarchar(max)
declare @declares nvarchar(max)
declare @crtbls nvarchar(100)

set @crtbls = ' create trigger trg_DG on DG after insert, update, delete as '
set @declares = 'declare @scrno nvarchar(10)
    declare @visit nvarchar(10)
    declare @serial nvarchar(10)
    declare @tbl nvarchar(10)
    declare @entrytime nvarchar(20) '

 
set @e = @crtbls + @declares

 

declare @i nvarchar(10)
set @i = 1
while(@i <(select count(*) from dbspec))
begin

declare @declare nvarchar(max)

 

declare @aa nvarchar(100)
declare @bb nvarchar(100)
declare @cc nvarchar(100)
declare @dd nvarchar(100)
declare @ee nvarchar(100)
declare @ff nvarchar(100)
declare @gg nvarchar(100)
declare @hh nvarchar(100)


declare @w varchar(max)
declare @a varchar(max)
declare @b varchar(max)
declare @tbl nvarchar(100)
declare @tbl_next varchar(100)
declare @col varchar(100)
declare @col_next varchar(100)
declare @typ varchar(100)
declare @typ_next varchar(100)

declare @crtbl varchar(100)
declare @crtbl_next varchar(100)
declare @space varchar(100)
declare @c varchar(max)


set @tbl = (select tbl from dbspec where num = @i)
set @tbl_next = (select tbl from dbspec where num = @i + 1)
set @col = (select col from dbspec where num = @i)
set @col_next = (select col from dbspec where num = @i+ 1)
set @crtbl = ' create trigger trg_' + @tbl + ' on '+ +@tbl + ' after insert, update, delete as '
set @crtbl_next = ' create trigger trg_' + @tbl_next  + ' on '+ +@tbl_next + ' after insert, update, delete as '
set @declare = 'declare @scrno nvarchar(10)
    declare @visit nvarchar(10)
    declare @serial nvarchar(10)
    declare @tbl nvarchar(10)
    declare @entrytime nvarchar(20) '

 


If(@tbl = @tbl_next)
begin

 if(@col = 'visit')
  begin
  set @aa = 'set @visit = (select visit from inserted)'
  set @bb = ' declare @input'+@i+' nvarchar(10) '+' set @input'+@i+ ' = '+ @aa
  set @gg = ' declare @col'+@i+' nvarchar(10) '+' set @col'+@i+' = (select '+ @col + ')' 

  set @e = @e +@aa+ @bb +@gg
  end

 else if(@col = 'serial')
  begin
  set @aa= 'set @serial = (select serial from inserted)'
  set @bb = ' declare @input'+@i+' nvarchar(10) '+' set @input'+@i+ ' = '+ @aa
  set @gg = ' declare @col'+@i+' nvarchar(10) '+' set @col'+@i+' = (select '+ @col + ')' 

  set @e = @e +@aa+ @bb +@gg
  end

 else if(@col = 'scrno')
  begin
  set @aa = ' set @scrno = (select scrno from inserted)'
  set @bb = ' declare @input'+@i+' nvarchar(10) '+' set @input'+@i+ ' = '+ @aa
  set @gg = ' declare @col'+@i+' nvarchar(10) '+' set @col'+@i+' = (select '+ @col + ')' 

  set @e = @e +@aa+ @bb +@gg
 
  end
 else
  begin
  set @aa = ' declare @input'+@i+' nvarchar(10) '+' set @input'+@i+ ' = (select '+@col +' from inserted)'
  set @gg = ' declare @col'+@i+' nvarchar(10) '+' set @col'+@i+' = (select '+ @col + ')' 

  set @e = @e + @aa +@gg
  
  end

 set @ff = ' set @tbl = ''' + @tbl + ''''

 set @a = ' insert into atrail values(@scrno, @visit, @serial, @tbl, @col'+@i+', @input'+@i+', convert(nvarchar(20), getdate(),120))'
 set @e = @e + @ff+ @a
 set @i = @i +1
end

else
begin

 set @cc = ' declare @input'+@i+' nvarchar(10) '+' set @input'+@i+ ' = (select '+  @col+ ' from inserted)'

 set @gg = ' declare @col'+@i+' nvarchar(10) '+' set @col'+@i+' = (select '+ @col + ')' 
 set @e = @e + @cc + @gg
 

 set @a = ' insert into atrail values(@scrno, @visit, @serial, @tbl, @col'+@i+', @input'+@i+', convert(nvarchar(20), getdate(),120)) go'
 set @e = @e + @a
     
 set @b = @crtbl_next + @declare
 set @e = @e +@b
 set @i = @i + 1

end

end 
 set @cc = ' declare @input'+@i+' nvarchar(10) '+' set @input'+@i+ ' = (select '+  @col_next+ ' from inserted)'
 set @ff  = ' set @tbl = (select ' + @tbl + ')'
 set @gg = ' declare @col'+@i+' nvarchar(10) '+' set @col'+@i+' = (select '+ @col_next + ')' 
 set @e = @e + @cc + @dd + @ee + @ff + @gg
 set @a = ' insert into atrail values(@scrno, @visit, @serial, @tbl, @col'+@i+', @input'+@i+', convert(nvarchar(20), getdate(),120)) go'
 set @e = @e + @a
select(@e) 
 

이 글에 대한 댓글이 총 1건 있습니다.

뭘 하시려고 했던 것인지....

그리고 문제가 뭔지는 모르겠지만....!!!

~~~값을 넣는 문이었군요...

 

수고하셨습니다.

우욱님이 2012-03-08 17:22에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6341MS-SQL 2005 입출력 현황을 모니터링 하고 싶습니다. [1]
이동일
2012-03-10
6850
6340MS-SQL 2005에서 엑셀에 있는 데이타를 DB로 옴기는방법 없나요? [1]
이진희
2012-03-09
7592
6339r2 버젼 [1]
mssql
2012-03-08
6649
6338고수님들 도와주세요ㅜ [1]
나야
2012-03-08
7364
6337mssql linked server mysql 연결시 trigger 오류발생 [2]
문성주
2012-03-06
15840
6336MSSQL inDex [3]
박해일
2012-03-02
7419
6335이런경우 SQL문장 어떻게 만드나요 [1]
김길동
2012-03-02
6990
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다