473,387 Members | 1,579 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Scope_Identity() - Output parameter or not?

Sql Server, Scope_Identity(), Ado.NET:

Which is better? Using an output parameter to return Scope_Identity through
ExecuteNonQuery(), or adding Select Scope_Identity() to the end of the
procedure or ad hoc SQL and using ExecuteScalar()?

Thanks.
May 31 '07 #1
10 4021
The standard way is to run a batch
INSERT...;SELECT SCOPE_IDENTITY()...
in a single ExecuteScalar call.

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
"Mike" <bl***@blank.blankwrote in message
news:uX**************@TK2MSFTNGP06.phx.gbl...
Sql Server, Scope_Identity(), Ado.NET:

Which is better? Using an output parameter to return Scope_Identity
through
ExecuteNonQuery(), or adding Select Scope_Identity() to the end of the
procedure or ad hoc SQL and using ExecuteScalar()?

Thanks.


May 31 '07 #2
Great! That's what I do, but I've seen examples here and there using output
parameters and wondered why.

Thanks

Mike
"Eliyahu Goldin" <RE**************************@mMvVpPsS.orgwrote in
message news:e%****************@TK2MSFTNGP03.phx.gbl...
The standard way is to run a batch
INSERT...;SELECT SCOPE_IDENTITY()...
in a single ExecuteScalar call.

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
"Mike" <bl***@blank.blankwrote in message
news:uX**************@TK2MSFTNGP06.phx.gbl...
>Sql Server, Scope_Identity(), Ado.NET:

Which is better? Using an output parameter to return Scope_Identity
through
>ExecuteNonQuery(), or adding Select Scope_Identity() to the end of the
procedure or ad hoc SQL and using ExecuteScalar()?

Thanks.



May 31 '07 #3
Mike,
I believe using a output parameter is more efficient.
If you do the select scope_identity() technique you are returning an
entire row of data as a DataSet, DataTable, DataReader.. There is
still overhead associated with it (more network traffic, bigger object
to instantiate)

An output parameter is certainly better.

Vince

On May 31, 4:56 pm, "Mike" <b...@blank.blankwrote:
Great! That's what I do, but I've seen examples here and there using output
parameters and wondered why.

Thanks

Mike

"Eliyahu Goldin" <REMOVEALLCAPITALSeEgGoldD...@mMvVpPsS.orgwrote in
messagenews:e%****************@TK2MSFTNGP03.phx.gb l...
The standard way is to run a batch
INSERT...;SELECT SCOPE_IDENTITY()...
in a single ExecuteScalar call.
--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
"Mike" <b...@blank.blankwrote in message
news:uX**************@TK2MSFTNGP06.phx.gbl...
Sql Server, Scope_Identity(), Ado.NET:
Which is better? Using an output parameter to return Scope_Identity
through
ExecuteNonQuery(), or adding Select Scope_Identity() to the end of the
procedure or ad hoc SQL and using ExecuteScalar()?
Thanks.- Hide quoted text -

- Show quoted text -

Jun 1 '07 #4
??
Why do you think select scope_identity() returns more than just a single
scalar value?

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
<vi***********@gmail.comwrote in message
news:11*********************@p77g2000hsh.googlegro ups.com...
Mike,
I believe using a output parameter is more efficient.
If you do the select scope_identity() technique you are returning an
entire row of data as a DataSet, DataTable, DataReader.. There is
still overhead associated with it (more network traffic, bigger object
to instantiate)

An output parameter is certainly better.

Vince

On May 31, 4:56 pm, "Mike" <b...@blank.blankwrote:
Great! That's what I do, but I've seen examples here and there using
output
parameters and wondered why.

Thanks

Mike

"Eliyahu Goldin" <REMOVEALLCAPITALSeEgGoldD...@mMvVpPsS.orgwrote in
messagenews:e%****************@TK2MSFTNGP03.phx.gb l...
The standard way is to run a batch
INSERT...;SELECT SCOPE_IDENTITY()...
in a single ExecuteScalar call.
--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
>http://msmvps.com/blogs/egoldin
"Mike" <b...@blank.blankwrote in message
>news:uX**************@TK2MSFTNGP06.phx.gbl...
>Sql Server, Scope_Identity(), Ado.NET:
>Which is better? Using an output parameter to return Scope_Identity
through
>ExecuteNonQuery(), or adding Select Scope_Identity() to the end of
the
>procedure or ad hoc SQL and using ExecuteScalar()?
>Thanks.- Hide quoted text -
- Show quoted text -


Jun 1 '07 #5
My understanding of ExecuteScalar is that it returns 1 single value. The
docs say nothing about returning this in a datareader/dataset. In fact, the
docs say that any values other than the first column of the first row are
discarded.

http://msdn2.microsoft.com/en-us/lib...utescalar.aspx

But thanks anyway.

Mike
<vi***********@gmail.comwrote in message
news:11*********************@p77g2000hsh.googlegro ups.com...
Mike,
I believe using a output parameter is more efficient.
If you do the select scope_identity() technique you are returning an
entire row of data as a DataSet, DataTable, DataReader.. There is
still overhead associated with it (more network traffic, bigger object
to instantiate)

An output parameter is certainly better.

Vince

On May 31, 4:56 pm, "Mike" <b...@blank.blankwrote:
>Great! That's what I do, but I've seen examples here and there using
output
parameters and wondered why.

Thanks

Mike

"Eliyahu Goldin" <REMOVEALLCAPITALSeEgGoldD...@mMvVpPsS.orgwrote in
messagenews:e%****************@TK2MSFTNGP03.phx.g bl...
The standard way is to run a batch
INSERT...;SELECT SCOPE_IDENTITY()...
in a single ExecuteScalar call.
--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
"Mike" <b...@blank.blankwrote in message
news:uX**************@TK2MSFTNGP06.phx.gbl...
Sql Server, Scope_Identity(), Ado.NET:
>Which is better? Using an output parameter to return Scope_Identity
through
ExecuteNonQuery(), or adding Select Scope_Identity() to the end of
the
procedure or ad hoc SQL and using ExecuteScalar()?
>Thanks.- Hide quoted text -

- Show quoted text -


Jun 1 '07 #6
Eliyahu Goldin wrote:
??
Why do you think select scope_identity() returns more than just a single
scalar value?
Because you are executing a select. It creates a result in the form of
data rows. The result is a single row containing a single field, but
it's still a result in the form of data rows.

--
Göran Andersson
_____
http://www.guffa.com
Jun 1 '07 #7
Mike wrote:
My understanding of ExecuteScalar is that it returns 1 single value. The
docs say nothing about returning this in a datareader/dataset. In fact, the
docs say that any values other than the first column of the first row are
discarded.
Yes, the method returns a single value, but the database query returns a
complete result to return that single value.

--
Göran Andersson
_____
http://www.guffa.com
Jun 1 '07 #8

"Göran Andersson" <gu***@guffa.comwrote in message
news:el****************@TK2MSFTNGP05.phx.gbl...
Mike wrote:
>My understanding of ExecuteScalar is that it returns 1 single value. The
docs say nothing about returning this in a datareader/dataset. In fact,
the docs say that any values other than the first column of the first row
are discarded.

Yes, the method returns a single value, but the database query returns a
complete result to return that single value.
But it appears to be faster (and there more efficient?) to use ExecuteScalar

http://codebetter.com/blogs/john.pap.../10/61745.aspx

Mike
Jun 1 '07 #9
If you are using a stored procedure, you can return Scope_Identity() and it
will attach to the return parameter. Or, you can create an output parameter.

Using ExecuteScalar() gives you a firehose cursor with very few lines of
code, however. The speed of SELECT SCOPE_IDENTITY() is equivalent, and you
have fewer lines of code in the end than you do pulling a parameter.

In other words, do what you desire. You are not really going to see a major
difference either way you go.

--
Gregory A. Beamer
MVP; MCP: +I, SE, SD, DBA
http://gregorybeamer.spaces.live.com
Co-author: Microsoft Expression Web Bible (upcoming)

************************************************
Think outside the box!
************************************************
"Mike" <bl***@blank.blankwrote in message
news:uX**************@TK2MSFTNGP06.phx.gbl...
Sql Server, Scope_Identity(), Ado.NET:

Which is better? Using an output parameter to return Scope_Identity
through ExecuteNonQuery(), or adding Select Scope_Identity() to the end
of the procedure or ad hoc SQL and using ExecuteScalar()?

Thanks.

Jun 1 '07 #10
Mike wrote:
"Göran Andersson" <gu***@guffa.comwrote in message
news:el****************@TK2MSFTNGP05.phx.gbl...
>Mike wrote:
>>My understanding of ExecuteScalar is that it returns 1 single value. The
docs say nothing about returning this in a datareader/dataset. In fact,
the docs say that any values other than the first column of the first row
are discarded.
Yes, the method returns a single value, but the database query returns a
complete result to return that single value.

But it appears to be faster (and there more efficient?) to use ExecuteScalar

http://codebetter.com/blogs/john.pap.../10/61745.aspx

Mike
With such a small difference as 3%, I would say that they seem to be
equally fast.

That test doesn't say anything at all about scalability or the use of
resources, though.

I don't have much substantial on this yet, but I would say that a
parameter is likely to use less resources than a data reader. A data
reader is built to handle data of very different sizes, and uses a
buffer of several kB for buffering the data, even if the data that you
actually get is only a few bytes.

--
Göran Andersson
_____
http://www.guffa.com
Jun 2 '07 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: vivienne.netherwood | last post by:
I am developing an Access Project front end with a SQL server database. I have written a stored procedure that returns a record set and also a value via an output parameter. The procedure is as...
8
by: Christopher Weaver | last post by:
I'm having trouble accessing the value of an output parameter of a stored procedure. The SP looks like this: SET TERM ^ ; CREATE PROCEDURE SP_NEW_TASK RETURNS ( "uidTask" INTEGER) AS begin
8
by: Patreek | last post by:
Hi, On the line where I'm assigning RecordCount to be the value of my output parameter, I'm getting the generic "Object reference not set to an instance of an object" error. I've isolated it...
4
by: Mr Not So Know It All | last post by:
im new to SQL Server and ASP.Net. Here's my problem. I have this SQL Server stored procedure with an input parameter and output parameter CREATE PROCEDURE . @in_rc varchar(8) @out_eList...
0
by: rockdale | last post by:
Hi, All How to get the output parameter's value when you use the SQLHelper (Microsoft Data Access Block)? When I try to access my ourput parm I got the following error. ...
6
by: c676228 | last post by:
Hi everyone, I wrote a store procedure that fetch one row data in the database based on the parameter value I entered. After I created the store procedure, the store procedure code looks like...
8
by: Alec MacLean | last post by:
Hi, I'm using the DAAB Ent Lib (Jan 2006) for .NET 2.0, with VS 2005 Pro. My project is a Web app project (using the WAP add in). Background: I'm creating a survey system for our company, for...
7
by: ashtek | last post by:
Hi, I have a generic function that executes a stored procedure & returns a data table. Code: === public static DataTable ExecuteStoredProcedure(string strProc,SqlParameter paramArray) {...
1
by: John Bailo | last post by:
This is a my solution to getting an Output parameter from a SqlDataSource. I have seen a few scant articles but none of them take it all the way to a solution. Hopefully this will help some...
4
by: jpatchak | last post by:
OK, not sure if there is a way around this. I have some relatively complicated SQL code in a stored proc. The proc is working fine. When I execute this code in SSMS, it returns a record set and an...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.