2009-06-06 4 views
13

MS SQL의 테이블에 GUID (사용자 ID)를 삽입하려고했지만 GUID 값의 일부인 '-'에 대한 오류가 계속 발생했습니다. 아래에 정의 된 내 proc이 있습니다.SQL 서버에 GUID 삽입

@userID uniqueidentifier, 
@bookID int, 
@dateReserved datetime, 
@status bit 

INSERT INTO Reservation(BookId, DateReserved, [Status], UserId) 
VALUES (@bookID, @dateReserved, @status, @userID) 

그러나 저장 프로 시저가 Management Studio에서 실행되면 값을 작은 따옴표로 묶으면 잘 실행됩니다. 어떻게 내 저장된 proc에서 문제없이 guid 삽입을 처리 할 수 ​​있습니까?

감사합니다.

DECLARE @return_value int 

EXEC @return_value = [dbo].[usp_ReserveBook] 
     @userID = 'AE019609-99E0-4EF5-85BB-AD90DC302E70', 
     @bookID = 7, 
     @dateReserved = N'09/03/2009', 
     @status = 1 

SELECT 'Return Value' = @return_value 

M :

업데이트 다음은 단순히 QUOTE 당신의 GUID 필요

Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near '-'. 
+0

사용자 ID와 bookid 인수를 실수로 바꾸 었습니까? 버그의 원인이되는 예제 EXEC 문을 게시 할 수 있습니까? 귀하의 SQL 지금까지 괜찮아 보인다. –

답변

28

그냥 varchar에서 전송하십시오.

DECLARE @return_value int 

EXEC @return_value = [dbo].[usp_ReserveBook] 
     @userID = CONVERT(uniqueidentifier, 'AE019609-99E0-4EF5-85BB-AD90DC302E70'), 
     @bookID = 7, 
     @dateReserved = N'09/03/2009', 
     @status = 1 

SELECT 'Return Value' = @return_value 
+0

우수! 이 하나는 아름답게 작동했습니다. – simplyme

9

오류 메시지가 SQL 간부 여기

DECLARE @return_value int 

EXEC @return_value = [dbo].[usp_ReserveBook] 
    @userID = AE019609-99E0-4EF5-85BB-AD90DC302E70, 
    @bookID = 7, 
    @dateReserved = N'09/03/2009', 
    @status = 1 

SELECT 'Return Value' = @return_value 

것입니다 아크

+0

4 초 만에 나를 때려. 내 제거. –

+0

그래, 내가 어떻게 그렇게 할 때, varchar가 uniqueidentifier로 변환 될 수 없다는 오류가 발생했기 때문에 내 저장된 proc에서 그렇게 할 수있는 것으로 나타났습니다. 고마워요 – simplyme

+0

@simply : 그 소리는 * 진짜 문제입니다; 해당 varchar/uid 오류 메시지를 만드는 코드 줄을 추가 할 수 있습니까? –

1

GUID 주위에 작은 따옴표가 필요합니다 ... 그것은 단지 SQL 서버에 문자열입니다.

sp 님이 sql 함수 newid()를 사용하여 GUID를 생성하도록 할 수 있습니다 ... SQL Server 만 생각합니다.

그리고 다른 테이블에서 GUID를 가져 오는 경우 SP가 해당 테이블에서 해당 GUID를 가져 가게하십시오.

0

이를 사용해보십시오 :

sql_cmd.Parameters.AddWithValue 
("@Company_ID",**Guid.Parse**("00000000-0000-0000-0000-000000000000"); 

간단한 문자열 담당자를 취할 것이다. 그것을 GUID obj로 바꿉니다.