samliam
asked on
If.. else?
How do I do if- else in SQL?
I want to insert something into a table, but if column1=c1 and column2=c2, it returns a message indicating that column1/column2 already exist.
How do I do that?
Thanks.
I want to insert something into a table, but if column1=c1 and column2=c2, it returns a message indicating that column1/column2 already exist.
How do I do that?
Thanks.
ASKER
OK. I have a stored proc like:
if exists(...)
else print 'item already exists.'
How do I get the 'exist' message back to my calling program?
if exists(...)
else print 'item already exists.'
How do I get the 'exist' message back to my calling program?
use RAISERROR
refer for more details
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ra-rz_5ooi.asp?frame=true
refer for more details
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ra-rz_5ooi.asp?frame=true
IF(@column1= 'c1' and @column2 = 'c2')
BEGIN
// do something
END
ELSE
BEGIN
// do something
END
if exists(...)
begin
end
else
RETURN -1
BEGIN
// do something
END
ELSE
BEGIN
// do something
END
if exists(...)
begin
end
else
RETURN -1
ASKER
In my stored proc:
if exists( select * from @table where year='2004' and model='@model')
RAISERROR ('Item already exists!')
This does not work, I have to use dynamic sql since @table is a variable. How do I use dynamic sql here?
Will up the points to 100.
Thanks.
if exists( select * from @table where year='2004' and model='@model')
RAISERROR ('Item already exists!')
This does not work, I have to use dynamic sql since @table is a variable. How do I use dynamic sql here?
Will up the points to 100.
Thanks.
ASKER
So if I return '-1' in the stored proc
In the calling program:
ExecuteNonQuery() will return '-1'? or do I have to add an output parameter?
In the calling program:
ExecuteNonQuery() will return '-1'? or do I have to add an output parameter?
create procedure sptest
@table varchar(128) ,
@madel varchar(50) ,
@result varchar(20) out
as
declare @i int, @sql nvarchar(1000)
select @sql = 'select @i = 1 where exists (select * from ' + @table + ' where year='2004' and model=''' + @model + ''')'
exec sp_execute @sql, N'@i int out', @i out
if @i = 1
select @result = 'item exists'
else
select @result = 'item does not exists
go
@table varchar(128) ,
@madel varchar(50) ,
@result varchar(20) out
as
declare @i int, @sql nvarchar(1000)
select @sql = 'select @i = 1 where exists (select * from ' + @table + ' where year='2004' and model=''' + @model + ''')'
exec sp_execute @sql, N'@i int out', @i out
if @i = 1
select @result = 'item exists'
else
select @result = 'item does not exists
go
are you using c#??
you can access the return value via return parameter.
OR
you can assign it to output variable and then check it.
If you want I can send the code sample, how you can access the return values using C#. :)
OR
you can assign it to output variable and then check it.
If you want I can send the code sample, how you can access the return values using C#. :)
Why not simply add a unique contraint on the table ?
ASKER
nigelrivett,
I get this error message using your code:
SqlException: Procedure expects parameter '@handle' of type 'int'.
Do I need to add a parameter after sp_execute?
I get this error message using your code:
SqlException: Procedure expects parameter '@handle' of type 'int'.
Do I need to add a parameter after sp_execute?
create procedure sptest
@table varchar(128) ,
@model varchar(50) ,
@result varchar(20) out
as
declare @i int, @sql nvarchar(1000)
select @sql = 'select @i = 1 where exists (select * from ' + @table + ' where year='+2004+' and model=''' + @model + ''')'
exec sp_execute @sql, N'@i int out', @i out
if @i = 1
select @result = 'item exists'
else
select @result = 'item does not exists'
go
@table varchar(128) ,
@model varchar(50) ,
@result varchar(20) out
as
declare @i int, @sql nvarchar(1000)
select @sql = 'select @i = 1 where exists (select * from ' + @table + ' where year='+2004+' and model=''' + @model + ''')'
exec sp_execute @sql, N'@i int out', @i out
if @i = 1
select @result = 'item exists'
else
select @result = 'item does not exists'
go
use sp_executesql @sql, N'@i int out', @i out
Why not simply add a unique contraint on the table ?
ASKER
I tried sp_executesql but I got syntax error.
Hi sam,
this is what im tested.
create procedure sptest
@table varchar(128) ,
@model varchar(50) ,
@result varchar(20) out
as
declare @i int, @sql nvarchar(1000)
--select @sql = 'select @i = 1 where exists (select * from ' + @table + ' where year='+2004+' and model=''' + @model + ''')'
select @sql = 'select @i = 1 where exists (select * from ' + @table + ')'
exec sp_executesql @sql, N'@i int out', @i out
if @i = 1
select @result = 'item exists'
else
select @result = 'item does not exists'
go
and to run sp..
declare @result varchar(20)
exec sptest 'Agent', '', @result out
print @result
it gives correct result. what is the systax error it gives?
this is what im tested.
create procedure sptest
@table varchar(128) ,
@model varchar(50) ,
@result varchar(20) out
as
declare @i int, @sql nvarchar(1000)
--select @sql = 'select @i = 1 where exists (select * from ' + @table + ' where year='+2004+' and model=''' + @model + ''')'
select @sql = 'select @i = 1 where exists (select * from ' + @table + ')'
exec sp_executesql @sql, N'@i int out', @i out
if @i = 1
select @result = 'item exists'
else
select @result = 'item does not exists'
go
and to run sp..
declare @result varchar(20)
exec sptest 'Agent', '', @result out
print @result
it gives correct result. what is the systax error it gives?
ASKER
I got "SqlException: Line 1: Incorrect syntax near '@i' "
Here is the code:
.........
@table varchar(20),
@model varchar(30),
...........
@result int out
AS
begin
declare @sql0 nvarchar(300)
declare @i int
select @sql0='@i=1 where exists (select * from '+@table+' where year="2004" and model="'+@model+'")'
exec sp_executesql @sql0, N'@i int out', @i out
if @i=1
select @result=-1
else
select @result=1
begin
...... code that worked ...
end
............
Here is the code:
.........
@table varchar(20),
@model varchar(30),
...........
@result int out
AS
begin
declare @sql0 nvarchar(300)
declare @i int
select @sql0='@i=1 where exists (select * from '+@table+' where year="2004" and model="'+@model+'")'
exec sp_executesql @sql0, N'@i int out', @i out
if @i=1
select @result=-1
else
select @result=1
begin
...... code that worked ...
end
............
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Has your question been answered? If so could you please close it.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ia-iz_7usl.asp