2017-04-08 3 views
0

변수를 테이블 이름에 첨부하기 위해 명령문을 실행하려고합니다. SQL에 익숙하지 않아 온라인에서이 문제에 대한 해결책을 찾지 못했습니다. 나는 다음과 같은 오류가이 쿼리를 실행할 때마다SQL 서버에서 시간 변수를 사용할 때 스칼라 변수를 선언해야합니다.

Declare @t time 
Set @t='12:00:00.1' 
Declare @ttable varchar (255) 
Set @ttable='Temp'+(Select top 1 ID from mtable) 

    Exec('Insert into '[email protected]+'(Timestamp) values ('+'@t'+')') 

:

Msg 137, Level 15, State 2, Line 1 Must declare the scalar variable "@t".

이 난에 실행하고 정확히 모르겠습니다. 방금 SQL Server Management Studio (SQL Server 2008 R2)를 열고 데이터베이스와 테이블을 만들었습니다. 어떤 도움이라도 대단히 감사합니다.

+1

간부에 @t 주위에 따옴표를 삭제 시도 할 수 있습니다? –

+0

질문을 편집하고 샘플 데이터와 원하는 결과를 제공하고 무엇을하려고하는지 설명하십시오. "변수를 테이블 이름에 연결"은 의미가 없습니다. –

답변

1

동적으로 SQL 문을 호출하는 올바른 방법은 sp_executesql 및 매개 변수를 사용하는 것입니다. 테이블이 이미 존재하는 가정하면, 당신은 할 것 :

Declare @t time; 
Set @t = '12:00:00.1'; 

Declare @tablename varchar(255); 

Set @tablename = 'Temp'+ (Select top 1 ID from mtable); 

declare @sql nvarchar(max) 
set @sql = 'Insert into @tablename(Timestamp) values (@t)'; 

set @sql = replace(@sql, '@tablename', @tablename); -- alas, cannot use parameters for table names 

exec sp_executesql @sql, N'@t time', @t = @t; 

나는이 같은 테이블 이름을 구성하는 가난한 데이터베이스 설계 생각합니까. 대신 id에 대한 단일 테이블과 추가 열이 있어야합니다.

+0

이 다음 오류가 있습니다 : 메시지 102, 수준 15, 상태 1, 줄 6 '='근처에 구문이 잘못되었습니다. 메시지 137, 수준 15, 상태 2, 줄 7 "@sql"스칼라 변수를 선언해야합니다. 메시지 137, 수준 15, 상태 2, 줄 9 "@sql"스칼라 변수를 선언해야합니다. – Kuba

+0

@Kuba 답변이 지금 편집되었습니다. – Hadi

+0

이것은 효과가 있습니다. 고맙습니다! – Kuba

0

이이

Declare @t time 
declare @tVar varchar(max) 
Set @t='12:00:00.1' 
set @tVar=CONVERT(VARCHAR,@t) 
Declare @ttable varchar (255) 
Set @ttable='Temp'+(Select '1') 

    --PRINT('Insert into '[email protected]+'(Timestamp) values ('+CONVERT(VARCHAR,@t)+')') 
    EXEC ('Insert into '[email protected]+'(Timestamp) values ('[email protected]+')') 
관련 문제