2014-10-06 1 views
1

안녕 신사 숙녀 여러분구문 오류 테이블 C 번호를 생성하기위한

나는 쉬운 솔루션을해야한다고 생각하지만, 그것을

기본적으로 내가 SQL을 통해 테이블을 만드는 오전을 찾을 수없는 것과 strugling하고 SQL을 실행할 때 SQL에 문제가 있습니다.

OleDbCommand cmd = new OleDbCommand (@"CREATE TABLE " + ClientID + " (Transaction_ID INT PRIMARY KEY NOT NULL, Transaction CHAR(255), Date DATE, Transaction_Amount INT, Balance INT, Deposited INT, Withdrew INT, Loan INT, Applied INT, Approved INT, Payment_Monthly INT, Monthly_Income INT)", mydb);

지금 나는 그것이 작동 TransactionDate 필드를 제거 할 때 오류를 제공하고 내가 발견 한 내 SQL의 어느 부분을 발견 내 SQL 문을 테스트 : 다음은 내 코드입니다. 내가 그 중 하나만 제거하면 여전히 충돌합니다. 심지어 CHAR(255)에서 VARCHAR(255)으로 데이터 유형을 변경하려고 시도했습니다. DATE에서 INT까지도 변경하려고했습니다.

솔직히 문제를 찾을 수없는 것 같습니다. 도와주세요

감사합니다.

PS : ClientID은 예를 들어 해시 태그가있는 3 개의 숫자와 3 개의 문자의 조합입니다. 123 # ABC

답변

6

두 개의 열 이름은 SQL의 예약어입니다.

[Transaction] CHAR(255), 
[Date] DATE, 

즉, 동적 SQL 또는 저장 프로 시저에서 이러한 필드에 액세스 언제든지, 당신은뿐만 아니라 대괄호를 사용해야합니다 염두에

SELECT * FROM ClientTable WHERE [Transaction] = 'A' 
유지 : 대괄호로 묶어하면 문제를 해결할 수
+0

더 좋은 해결책은 해당 열 이름에 더 구체적입니다. Transaction은 OP가 TransactionId 또는 TransactionCode 같은 것을 의미합니까? 날짜 란 날짜가 처리 된 날짜, 처리해야하는 날짜, 승인 된 날짜, 처음 입력 된 날짜 등입니다. 보다 기술적 인 컬럼 이름을 사용하는 것이 좋습니다. – NotMe

+2

전적으로 동의하지만 개발자가 열 이름을 제어 할 수없고 이러한 시나리오를 처리 할 수있는 방법이 있어야 할 때가 있습니다. 예를 들어, 열 이름이 비슷하고 소스 애플리케이션의 취약성을 기반으로하는 열 살짜리 앱으로 작업 할 경우 열 이름을 변경하려고 할 수 없으므로 이러한 해결 방법이 남아 있습니다. 분명히 이상적은 아니지만 실제 시나리오입니다. –

+0

해결되지 않은 더 큰 문제는 테이블 이름입니다. 숫자로 시작하는 테이블의 이름 지정은 거의 작동하지 않습니다. 또한, SQL OP의 어떤 맛을 사용 하느냐에 따라 열 이름에 대한 키워드'Date'가 이스케이프 될 필요가 없을 수도 있습니다 (MS SQL 2012에서는 모티베이션없이 작동 함). – Michael