Рейтинг:
1
Member 14126984
ваш код верен, просто верните значение @result и передайте его своему методу в C# для ex. int id=insertdetails(); где insertdetails-это метод в 3-уровневой архитектуре
здесь вы можете писать, если условие, если id 1 "Детали уже существовали еще"детали вставлены"
ALTER PROCEDURE [dbo].[Useradd]
@username varchar(20),
@pword nvarchar(20),
@empname varchar(20),
@email nvarchar(50),
@designation varchar(20),
@reportto varchar(20),
@result int output
AS
BEGIN
IF EXISTS(SELECT * FROM Users WHERE username= @username)
SET @result = 1
return @result
ELSE
SET @result = 0
return @result
INSERT INTO Users(username,pword,empname,email,designation,reportto)
VALUES(@username,@pword,@empname,@email,@designation,@reportto)
END
вот и все
я думаю, это вам поможет.
спасибо,
Мохан Кишор.
CHill60
А ты нет return
параметр, который был определен как output
- вы присваиваете ему значение, и вызывающий код должен забрать его из списка параметров. Это особенно важно, если учесть, что вы можете возвращать только тип int
из хранимой процедуры. MS, как правило, просто возвращают 0 из своих хранимых процедур, чтобы указать успех (ненулевое значение указывает на неудачу). Кроме того, и вы, и ОП упустили тот факт, что вы всегда будете вставлять данные в таблицу, независимо от того, существует ли уже is или нет, потому что IF / ELSE может выполнить только один оператор. Ваш код фактически сгенерирует ошибку "неправильный синтаксис рядом с ключевым словом "ELSE""
Лучше бы так и было
ALTER PROCEDURE [dbo].[Useradd]
@username varchar(20),
@pword nvarchar(20),
@empname varchar(20),
@email nvarchar(50),
@designation varchar(20),
@reportto varchar(20),
@result int output
AS
BEGIN
IF EXISTS(SELECT * FROM Users WHERE username= @username)
SET @result = 1
ELSE
BEGIN
SET @result = 0
INSERT INTO Users(username,pword,empname,email,designation,reportto)
VALUES(@username,@pword,@empname,@email,@designation,@reportto)
END
return @result
END
Richard Deeming
На самом деле, эта версия будет никогда вставьте данные, так как обе ветви return
прежде чем добраться до INSERT
заявление. :)
CHill60
О, черт возьми. Как же я мог ошибиться? Снова. Не отвечай на этот вопрос! :-)
Спасибо за поправку
Рейтинг:
0
Sandeep Mewara
Свой путь объявлять параметр @получен неправильный результат.
Правильный способ объявления локальной переменной-это:
DECLARE @result int -- in body after AS
На самом деле вам это не нужно, основываясь на вашем сценарии. Попробуйте что-нибудь вроде:
CREATE PROCEDURE [dbo].[Useradd]
@username varchar(20),
@pword nvarchar(20),
@empname varchar(20),
@email nvarchar(50),
@designation varchar(20),
@reportto varchar(20)
AS
IF (SELECT COUNT(*) FROM Users WHERE username= @username) < 1
BEGIN
INSERT INTO Users(username,pword,empname,email,designation,reportto)
VALUES(@username,@pword,@empname,@email,@designation,@reportto)
END
ОБНОВЛЕНИЕ: Изменил условие подсчета с >0 на <1
Yusuf
Ваша процедура должна была проверить наличие < 0. так как теперь она будет вставляться только в том случае, если имя пользователя существует, а это не то, что просил ОП.
Sandeep Mewara
Спасибо, мой плохой!
Кстати, не < 0.... он должен быть меньше < 1 :)
fwr
Спасибо, сэр!! теперь он работает должным образом.
Sandeep Mewara
Приятно знать, что это помогло и работает.
mohangbits
лучший из них :)
Dalek Dave
хороший ответ.
CHill60
OP не объявлял локальную переменную, они были (правильно) объявлены выходным параметром