1

이제 SP를 만드는 데 익숙하지 않고 지금 내 테이블 보고서에 값을 삽입하기 위해 SP를 만들려고합니다.저장 프로 시저 오류 : "nvarchar 데이터 형식을 uniqueidentifier로 변환하는 중 오류가 발생했습니다"

Msg 8114, Level 16, State 5, Procedure spInsertOrUpdate, Line 0 Error converting data type nvarchar to uniqueidentifier

누군가가이 문제를 좀 도와 주시겠습니까 :

CREATE TABLE Report (
    ID UNIQUEIDENTIFIER PRIMARY KEY NOT NULL, 
    STAFF VARCHAR(1000)NOT NULL, 
    EMAIL VARCHAR(1000)NOT NULL, 
    LASTCHANGE DATE NOT NULL 
) 

CREATE PROCEDURE spInsertOrUpdate(
    @ID UNIQUEIDENTIFIER, 
    @STAFF VARCHAR(1000), 
    @EMAIL VARCHAR(1000), 
    @LASTCHANGE DATETIME 
) AS 
BEGIN 
    INSERT INTO Report(ID, STAFF, EMAIL, LASTCHANGE) 
     VALUES(@ID, @STAFF, @EMAIL, @LASTCHANGE) 
END 

EXEC spInsertOrUpdate NEWID, 'Evlyn Dawson', '[email protected]', GETDATE 

오른쪽 SP를 실행 한 후 나는 오류 다음?

+0

I가 괄호를 추가 할 때마다 나는 항상이 오류 중 하나 NEWID 또는 GETDATE : 잘못된 구문 가까운 ')' –

답변

0

감사를 사용해야합니다 마지막으로 SP 내에서이 일을 적당한 방법을 발견하지만 경우, DATE 유형의 대상이므로주의 이제는 SP에 대한 올바른 이해를 얻었습니다.이것은 내가 문제를 내가 CARS 열을 또한 가지고

CREATE PROCEDURE spInsertOrUpdate(@STAFF VARCHAR(1000),@EMAIL VARCHAR(1000),@CARS VARCHAR(1000)) 

AS 
BEGIN 
INSERT INTO Report(ID,STAFF,EMAIL,CARS,LASTCHANGE) 
VALUES(NEWID(),@STAFF,@EMAIL,@CARS,GETDATE()) 
END 

EXEC spInsertOrUpdate 'Evlyn Dawson','[email protected]','Ferrari' 

주를 해결하는 방법입니다

+0

나는 NEWID와 GETDATE의 기본값으로 내 테이블을 떠나고 싶지 않았습니다. 내가 원하는 것은 제 SP에 이러한 기능을 제공하는 것이 었습니다. 감사합니다. yone의 도움이되는 대답 나는 그것을 끝내게 될 수 있었다. 고맙다!! –

1

나는 제대로 함수를 호출하여 시작하는 것입니다 : 당신이 그들을 후에 괄호가 필요하므로

EXEC spInsertOrUpdate NEWID(), 'Evlyn Dawson', '[email protected]', GETDATE(); 

NEWID()GETDATE()는 함수입니다.

그러나 괄호가 없으면 특정 오류가 발생할 것으로 생각하지 않습니다. 먼저 변수를 설정 한 다음 exec에 변수를 사용해야합니다.

편집 :

더 나은 방법이 ID를 설정하는 것입니다 자동으로날짜 :

CREATE TABLE Report (
    ID UNIQUEIDENTIFIER PRIMARY KEY NOT NULL DEFAULT NEWID(), 
    STAFF VARCHAR(1000) NOT NULL, 
    EMAIL VARCHAR(1000) NOT NULL, 
    LASTCHANGE DATE NOT NULL DEFAULT GETDATE() 
); 

CREATE PROCEDURE spInsertOrUpdate (
    @STAFF VARCHAR(1000), 
    @EMAIL VARCHAR(1000) 
) AS 
BEGIN 
    INSERT INTO Report(STAFF, EMAIL) 
     VALUES (@STAFF, @EMAIL) 
END; 

EXEC spInsertOrUpdate 'Evlyn Dawson', '[email protected]'; 

가 나는 또한 테이블의 기본 키와 같은 고유 식별자를 사용에서 당신을 낙담 것입니다. 그들은 페이지 조각화로 이어질 수 있기 때문에 다소 비효율적입니다. 대신 identity 열을 사용하십시오.

+0

가 있는가 내 SP에 문제가 있거나 내가 부르는 방식으로 문제가 발생합니까? 왜냐하면 정상적인 INSERT 쿼리를 사용할 때 테이블이이 값을 받아들이고 작동합니다. 또한 EXECUTION 문에 추가 할 때마다 괄호로 오류가 나타납니다. –

+0

감사합니다. 많이 도움이되었습니다. –

1

이 오류 메시지는 야생 거위 추격의 비트입니다. NEWID()GETDATE()은 모두 괄호가 필요합니다. Unforunately, 당신은 저장 프로 시저에 매개 변수로 함수를 전달할 수 없습니다, 그래서 당신은 첫번째 변수에 값을 할당해야합니다 : 당신은 단지 호출하면, 그래서 a UNIQUEIDENTIFIER column is a very poor choice for a clustering key

1

를 제쳐두고

DECLARE @ID UNIQUEIDENTIFIER = NEWID(), 
     @Date DATE = GETDATE(); 

EXEC#spInsertOrUpdate @ID, 'Evlyn Dawson', '[email protected]', @Date; 

당신의 getdate 및 newid를 사용하는 저장 프로 시저 왜 테이블에 기본값으로 추가하지 않습니까?

CREATE TABLE [dbo].[Report](
    [ID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Report_ID] DEFAULT (newid()), 
    [STAFF] [varchar](1000) NOT NULL, 
    [EMAIL] [varchar](1000) NOT NULL, 
    [LASTCHANGE] [datetime] NOT NULL CONSTRAINT [DF_Report_LASTCHANGE] DEFAULT (getdate()), 
CONSTRAINT [PK__Report__3214EC27D2D8BF72] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

절차

create PROCEDURE spInsertOrUpdate(

@STAFF VARCHAR(1000), 
@EMAIL VARCHAR(1000) 

) AS 
BEGIN 
INSERT INTO Report(STAFF, EMAIL) 
    VALUES(@STAFF, @EMAIL) 
END 

실행 문

EXEC spInsertOrUpdate 'Evlyn Dawson', '[email protected]' 

편집 하시기 바랍니다 또한 lastchanged 열은 타임 스탬프 날짜는 날짜 모든 도와 준거를 들어

관련 문제