У меня возникли проблемы с хранимой процедурой, которую я запускаю в SQL. Это для класса, который я беру, и хранимая процедура из учебника, но в учебнике было много ошибок в их SQL-коде, поэтому я не удивлюсь, если бы это было так. Я спросил профессора, и у него, похоже, тоже есть проблемы с этим.Ошибка хранимой процедуры SQL Server 2014
Вот хранимая процедура я использую, генерируемые с помощью SQL Server Management Studio в «Создать в» функцию:
USE [VGA]
GO
/****** Object: StoredProcedure [dbo].[InsertCustomerWithTransaction] Script Date: 4/8/2015 7:55:00 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[InsertCustomerWithTransaction]
@NewCustomerLastName CHAR(25),
@NewCustomerFirstName CHAR(25),
@NewCustomerAreaCode CHAR(3),
@NewCustomerPhoneNumber CHAR(8),
@NewCustomerEmail VARCHAR(100),
@ArtistLastName CHAR(25),
@WorkTitle CHAR(35),
@WorkCopy CHAR(12),
@TransSalesPrice NUMERIC(8,2)
AS
DECLARE @RowCount AS Int,
@ArtistID AS Int,
@CustomerID AS Int,
@WorkID AS Int,
@TransactionID AS Int
SELECT @RowCount = COUNT(*)
FROM dbo.CUSTOMER
WHERE LastName = @NewCustomerLastName
AND FirstName = @NewCustomerFirstName
AND AreaCode = @NewCustomerAreaCode
AND PhoneNumber = @NewCustomerPhoneNumber
AND Email = @NewCustomerEmail
IF (@RowCount > 0)
BEGIN
PRINT '****************************************************'
PRINT ''
PRINT ' The Customer is already in the database. '
PRINT ''
PRINT ' CustomerLastName = '[email protected]
PRINT ' CustomerFirstName = '[email protected]
PRINT ''
PRINT '****************************************************'
END
ELSE
BEGIN TRANSACTION
INSERT INTO dbo.CUSTOMER
(LastName, FirstName, AreaCode, PhoneNumber, Email)
VALUES
(@NewCustomerLastName, @NewCustomerFirstName, @NewCustomerAreaCode, @NewCustomerPhoneNumber, @NewCustomerEmail)
SELECT @CustomerID = CustomerID
FROM dbo.CUSTOMER
WHERE LastName = @NewCustomerLastName
AND FirstName = @NewCustomerFirstName
AND AreaCode = @NewCustomerAreaCode
AND PhoneNumber = @NewCustomerPhoneNumber
AND Email = @NewCustomerEmail
SELECT @ArtistID = ArtistID
FROM dbo.ARTIST
WHERE LastName = @ArtistLastName
IF @ArtistID IS NULL
BEGIN
PRINT '****************************************************'
PRINT ''
PRINT ' Invalid ArtistID '
PRINT ''
PRINT '****************************************************'
ROLLBACK TRANSACTION
RETURN
END
SELECT @WorkID = WorkID
FROM dbo.WORK
WHERE ArtistID = @ArtistID
AND Title = @WorkTitle
AND Copy = @WorkCopy
IF @WorkID IS NULL
BEGIN
PRINT '****************************************************'
PRINT ''
PRINT ' Invalid WorkID '
PRINT ''
PRINT '****************************************************'
ROLLBACK TRANSACTION
RETURN
END
ELSE
BEGIN
PRINT '****************************************************'
PRINT ''
PRINT ' WorkID = '+CONVERT(CHAR(6), @WorkID)
PRINT ''
PRINT '****************************************************'
END
SELECT @TransactionID = TransactionID
FROM dbo.TRANS
WHERE WorkID = @WorkID
AND SalesPrice = NULL
IF @TransactionID IS NULL
BEGIN
PRINT '****************************************************'
PRINT ''
PRINT ' Invalid TransactionID '
PRINT ''
PRINT '****************************************************'
ROLLBACK TRANSACTION
RETURN
END
BEGIN
UPDATE dbo.TRANS
SET DateSold = GETDATE(),
SalesPrice = @TransSalesPrice,
CustomerID = @CustomerID
WHERE TransactionID = @TransactionID
INSERT INTO dbo.CUSTOMER_ARTIST_INT (CustomerID, ArtistID)
VALUES (@CustomerID, @ArtistID)
END
COMMIT TRANSACTION
BEGIN
PRINT '****************************************************'
PRINT ''
PRINT ' The new Customer is now in the database. '
PRINT ''
PRINT ' Customer Last Name = '[email protected]
PRINT ' Customer First Name = '[email protected]
PRINT ''
PRINT '****************************************************'
PRINT '****************************************************'
PRINT ''
PRINT ' Transaction complete. '
PRINT ''
PRINT ' TransactionID = '+CONVERT(CHAR(6), @TransactionID)
PRINT ' ArtistID = '+CONVERT(CHAR(6), @ArtistID)
PRINT ' WorkID = '+CONVERT(CHAR(6), @WorkID)
PRINT ' Sales Price = '+CONVERT(CHAR(12), @TransSalesPrice)
PRINT ''
PRINT '****************************************************'
PRINT '****************************************************'
PRINT ''
PRINT ' New CUSTOMER_ARTIST_INT row added. '
PRINT ''
PRINT ' ArtistID = '+CONVERT(CHAR(6), @ArtistID)
PRINT ' CustomerID = '+CONVERT(CHAR(6), @CustomerID)
PRINT ''
PRINT '****************************************************'
END
GO
А вот код, который я бегу:
EXEC InsertCustomerWithTransaction
@NewCustomerLastName = 'Gliddens',
@NewCustomerFirstName = 'Melinda',
@NewCustomerAreaCode = '360',
@NewCustomerPhoneNumber = '765-8877',
@NewCustomerEmail = '[email protected]',
@ArtistLastName = 'Sargent',
@WorkTitle = 'Spanish Dancer',
@WorkCopy = '588/750',
@TransSalesPrice = 350.00;
Когда я запускаю код, он работает отлично до тех пор, раздел, который начинается с
SELECT @TransactionID = TransactionID
при Т его точка дает мне ошибку «Invalid TransactionID». Поскольку для ввода требуется WorkID и что столбец SalesPrice должен быть NULL, я добавил немного кода, чтобы дать мне WorkID в этот момент, и выход из него был правильным WorkID. screenshot Я зашел в базу данных и дважды проверял, что столбец SalesPrice в этой строке NULL, и это так. screenshot Но по какой-то причине хранимая процедура не может найти правильный TransactionID, хотя я могу вручную найти ее в таблице. Может кто-нибудь помочь мне выяснить, что я делаю неправильно здесь? Спасибо!
Если кто-либо из целей класса не отлаживает хранимые процедуры, вы должны получить возмещение в своем учебнике. –
Ник, вы не шутите. Я убедился, что сделаю комментарий, когда я просмотрю класс, что учебник ужасен. – crlast86