2014-12-19 2 views
4

아래 코드를 사용하여 SQL Server 2008 R2에서 테이블의 이름을 바꾸려고합니다.SQL에서 테이블의 이름을 바꿀 때 테이블 이름에 변수를 사용하십시오.

declare @date varchar(8) 
set @date = convert(varchar(8), getdate(), 112) 

exec sp_rename 'LM_SM_Billing_and_Send_Data', '[email protected]' 

제 의도는 테이블의 이름을 현재 날짜로 변경하는 것입니다.

select convert(varchar(8), getdate(), 112) 

반환

20,141,219하지만 이름 변경이 이름 테이블을 실행할 때, 대신 날짜

에 이름을 가질 수 있습니다 만약 내가 궁금하네요 삽입

[email protected] 

;

LM_SM_Billing_and_Send_Data_20141219 

테이블 이름의 변수를 사용합니다.

저는 꽤 많이 인터넷 검색을 해왔지만 동적 SQL을 사용하는 것으로 보입니다.하지만 필자가 사용한 적이 없으며 찾고있는 결과를 얻는데 구문이 무엇인지 알지 못했습니다.

+2

을 드롭 할 수 없습니다 당신이 할'설정 @name = 'LM_SM_Billing_and_Send_Data_'+ @ date' 다음'간부 인 sp_rename을 'LM_SM_Billing_and_Send_Data', @의 name' 같은? –

+1

SQL은 문자열 보간을하지 않습니다. ''LM_SM_Billing_and_Send_Data_ @ date ''내부를 살펴보고'@ date'를보고 그걸로 무엇인가 할 것이라고 생각하는 것 같습니다. 아니. –

답변

4

John Saunders가 지적한 바와 같이 SQL은 변수의 값을 매개 변수로 대체하지 않습니다. (문자열 보간)

이 문제를 해결할 때 문제가 될 수있는 다른 문제는 프로 시저 호출에서 연결됩니다. 다음은 또한 이 아니며이 작동합니다. 매개 변수가 변수 또는 상기에서 보듯이 아닌 상수 표현이 될 수 있기 때문에

exec sp_rename 'LM_SM_Billing_and_Send_Data', 'LM_SM_Billing_and_Send_Data_' + @date

이유 상술 것 같은 오류가있다. @myNewName을 선언하고 원하는 값을 해당 변수에 설정하면 해당 값을 프로 시저에 전달할 수 있습니다. 하나는 SQL 매개 변수 작업을 계속

declare @date varchar(8) 
set @date = convert(varchar(8), getdate(), 112) 

declare @myNewName varchar(255) = 'LM_SM_Billing_and_Send_Data_' + @date 

exec sp_rename 'LM_SM_Billing_and_Send_Data', @myNewName 

이 좋은 참조가 될 수 있습니다 : http://msdn.microsoft.com/en-us/library/ms189260(v=sql.105).aspx

+0

이것은 이름 바꾸기를 위해 완벽하게 작동했습니다. 나중에 스크립트에서 내가 이름을 바꾼 테이블을 삭제하려고하지만 drop table @myNewName이 실패합니다. 'expecting'. ', ID 또는 QUOTED_ID'오류가 발생합니다. 어떤 아이디어? – Sadie

+0

@Ben 좋은 지적입니다. 추가 정보를 추가했습니다. – Dan

+0

@Sadie이 주석 끝에있는 링크는 새로운 문제를 해결할 수 있습니다. 그렇지 않으면 동적 SQL과 "t-SQL drop table variable name"을 검색하는 것이 좋습니다. http://dba.stackexchange.com/questions/39627/how-to-drop-tables-using-a-variable-in-sql-server – Dan

0

사용 Dynamic Sql가 새 테이블 이름에 변수를 추가 할

이 사용 해보세요.

구문을 사용하여 새 이전 테이블의 데이터를 새 테이블로 복사합니다.이 파트는 동적으로 수행해야합니다.

그런 다음 마지막으로 이전 테이블

declare @date varchar(8), 
set @date = convert(varchar(8), getdate(), 112) 


set @sql ='select * into LM_SM_Billing_and_Send_Data_'[email protected]+' 
      from LM_SM_Billing_and_Send_Data' 

exec sp_executesql @sql 

Drop table LM_SM_Billing_and_Send_Data 
관련 문제