a_201712
a_201801
이런식으로 DB가 있는데,
매달 거기서 값을 받아와야하는데 DB명이 바뀌니
declare @MDate varchar(6)
declare @total int
set @MDate = (convert(varchar(6),getdate()-1,112)) (매월 1일날 전달 데이터 결산하는거라 이렇게 하면 전달인 2017_12 이렇게 찍힙니다)
@total에 a_201712.dbo.x 테이블의 어떤 값을 연산해서 가져와야하는데
제가 @db varchar(15)
set @db='a_'+@mdate+'..x where a=100'
이렇게 했더니 @db에는 a_201712..x where a=100
이렇게 들어가져서,
select @total=count(distinct id) from @db 이렇게 하고싶은데ㅠ
선언이 안되었다며
Must declare the table variable "@db".
라고 에러문구가 나네요..
어떻게 해야 할까요ㅠㅠ
Comment 6
-
vible
2018.01.16 13:43
-
vitill
2018.01.16 17:17
안녕하세요~
문자형 변수를 가지고 테이블 검색은 하지 못합니다.
제가 쓰는 방법이 있는데 알려드릴께요..
declare @a nvarchar(20)
, @sql nvarchar(100)
set @a = 'test'
set @tsql = 'select * from ' + @a
exec(@tsql)
이런식으로 exec명령문을 통해서 문자형 쿼리로 실행시켜주면 되더라구요..
-
vitill
2018.01.17 15:40
@count를 문자형으로 Cast 해서 넣으면 됩니다~declare@a nvarchar(20), @cnt int, @tsql nvarchar(100)set @cnt = 1set @a = 'test'set @tsql = 'select * from ' + @a + ' where a = ' + cast(@cnt as nvarchar(20))exec(@tsql) -
vible
2018.01.17 15:49
그냥 int 를 varchar로 바꿔서 선언했는데, 큰 상관은 없고 에러 없이 들어가더라구요
그래서 지금
select @sql
하게되면 결과창에
(No column name)
select @total = count(distinct id from a_291712..x where a=100
이렇게 잘 뜨구요, 이 컬럼 복붙해서 날쿼리 날리고 바로 아래 select @total 하게되면 숫자가 잘 뜨는데
exec (@sql)하게되면
Must declare the scalar variable "@total"
이라면서ㅜㅜ 이미 맨처음에 선언 했는데 @_@
-
vible
2018.01.17 16:18
아 이게 where절이 중요한게 아니고요..
완전 간단히 쓰자면
select count(*) from log_201712 를 해서 @total에 넣어야 합니다
@sql 내용에
select @total = count(*) from log_201712 하면 되잖아요
그래서 @sql ='select'+@total+@db (@db에는 = count(*) from log_201712 가 들어있음)
이렇게 잘 넣었는데,
@total을 int로 한 경우 exec -> @sql은 char라 안 들어감 -> int char 변환 오류
@total을 char로 한 경우 exec -> @total을 선언하지 않았다고 오류 (물론 선언했음)
입니다ㅜ
-
vitill
2018.01.17 16:47
쪽지를 확인해 주세요~~
somebody help me ...