-1

SQL에서 테이블에 대한 코드를 볼 수 있습니다. 저장 프로 시저가 작동하지만 행이 정보로 채워지지 않습니다. 코드에 어떤 문제가 있습니까?INSERT 저장 프로 시저가 작동하지 않습니다.

CREATE TABLE Category_Master(
    Category_ID INT IDENTITY(1,1) PRIMARY KEY, 
    Category_Name VARCHAR(50), 
    modification_Date DATETIME DEFAULT GETDATE() 
) 

Select * from Category_Master 
Go 

create trigger TRIGGER_MODIFDATE_Category_Master 
on Category_Master 
for insert, update 
as begin 
    UPDATE Category_Master 
    SET modification_Date = GETDATE() 
end 
Go 

CREATE PROCEDURE usp_InsertCategory_Master 
    @flag bit output,-- return 0 for fail,1 for success 
    @Category_ID int, 
    @Category_Name varchar(50) 
AS 
BEGIN 
    BEGIN TRANSACTION 
    BEGIN TRY 
     INSERT INTO Category_Master(Category_ID, Category_Name) 
     VALUES (@Category_ID, @Category_Name) 

     SET @flag = 1; 

     IF @@TRANCOUNT > 0 
     BEGIN 
      COMMIT TRANSACTION; 
     END 
    END TRY 
    BEGIN CATCH 
     IF @@TRANCOUNT > 0 
     BEGIN 
      ROLLBACK TRANSACTION; 
     END 

     SET @flag = 0; 
    END CATCH 
END 
Go 

Declare @flag bit 

EXEC usp_InsertCategory_Master @flag output, 1, 'Short LOAN' 
EXEC usp_InsertCategory_Master @flag output, 2, 'Long LOAN' 

if @flag=1 
    print 'Successfully inserted' 
else 
    print 'There is some error' 
+0

트리거 나쁘다. 삽입하거나 업데이트 한 레코드뿐만 아니라 모든 레코드를 업데이트 할 것이다. 삽입 또는 업데이트로 인해 영향을받는 레코드 만 얻으려면 삽입 된 테이블에 조인해야합니다. – HLGEM

답변

2

ID 열에 값을 삽입 할 수 없습니다. 당신은 그것에 아무것도 입력하지 않고 자동적으로 값을 채울 것입니다. 이 때문에 코드가 실패했습니다.

당신은 따라서 열이 작업을 수행 중 하나를 정의 할 수 있도록하려는 경우 :

Category_ID INT UNIQUE PRIMARY KEY

를하거나 삽입하는 동안 ID 열을 사용하지 않도록 설정할 수 있습니다 :

http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx

관련 문제