#sql #sql-server #stored-procedures #getdate
#sql #sql-сервер #хранимые процедуры #getdate
Вопрос:
Я пытаюсь создать только одну хранимую процедуру на SQL Server, которая позволяет пользователю выбирать, хочет ли он добавить или обновить запись. Ниже приведен мой код для моего сохраненного pro:
CREATE PROCEDURE Sproc_INSERTUPDATE_tblProducts
@ProductID bigint,
@ProductName varchar(50),
@Description varchar(50),
@Price money,
@DateCreated datetime,
@DateUpdated datetime,
@Choice bit output
AS
BEGIN
Select @Choice
If @Choice = 0
Begin
Insert into tblProducts (
ProductID,
ProductName,
Description,
Price,
DateCreated,
DateUpdated)
values (@ProductID,
@ProductName,
@Description,
@Price,
@DateCreated,
@DateUpdated)
Select * from tblProducts
End
Else If @Choice = 1
Begin
Update tblProducts Set ProductID = @ProductID,
ProductName = @ProductName,
Description = @Description,
Price = @Price,
DateCreated = @DateCreated,
DateUpdated = @DateUpdated
Select * from tblProducts
End
Else
Begin
Print 'Invalid choice. Please choose 0 or 1 only.'
End
END
GO
И вот мой код для выполнения сохраненного pro, который я создал:
USE StoreDB
Execute Sproc_INSERTUPDATE_tblProducts 4, 'Lotus', 'Flower', 85, GetDate, GetDate, 0
Я не сталкиваюсь с какими-либо ошибками в моем сохраненном pro, но когда я пытаюсь выполнить с помощью нового запроса, я получаю это сообщение об ошибке:
GetDate(): ошибка преобразования типа данных nvarchar в datetime.
Комментарии:
1. Я не понимаю «когда я пытаюсь выполнить, используя новый запрос» — какой запрос вы пытаетесь выполнить? вставка / обновление? или запрос select (считывание данных)?
2. Кстати, я не думаю, что вам нужно объявлять
@Choice
в качестве выходного параметра
Ответ №1:
Вы не можете передать такую функцию, как getdate(), в хранимый процесс. Объявите переменную datetime и используйте ее вместо этого.
Declare @now datetime = getdate();
Execute Sproc_INSERTUPDATE_tblProducts 4, 'Lotus', 'Flower', 85, @now, @now, 0
Ответ №2:
Попробуйте это?
Execute Sproc_INSERTUPDATE_tblProducts 4, 'Lotus', 'Flower', 85, GetDate(), GetDate(), 0