| Author |
Topic |
|
mrleokarthik
Starting Member
16 Posts |
Posted - 2006-07-19 : 10:21:29
|
| How can i execute this query thru Stored procedure ?delete from ts_imported where ts_imported.c_change_symbol in ('A','B')Symbols ('A','B') variesHow to pass this in paramterI tried this declare @Symbol varchar(20)declare @apos char(1) set @apos=''''set @Symbol = @apos +'A' + @apos + ',' + @apos + 'B' + @aposdelete from ts_imported where c_change_symbol in (@Symbol)Doesn't produce correct output! |
|
|
harsh_athalye
Master Smack Fu Yak Hacker
5581 Posts |
Posted - 2006-07-19 : 10:35:23
|
use dynamic sql as below:declare @Symbol varchar(20)Declare @Sql varchar(8000)declare @apos char(1) set @apos=''''set @Symbol = @apos +'A' + @apos + ',' + @apos + 'B' + @aposset @Sql = 'Delete from ts_imported where c_change_symbol in (' + @symbol + ')'Execute(@Sql)Harsh AthalyeIndia."Nothing is Impossible" |
 |
|
|
Srinika
Master Smack Fu Yak Hacker
1378 Posts |
Posted - 2006-07-19 : 10:39:43
|
| [code]Create Procedure MyProc (@a as varchar(10), @b varchar(10))asDelete from ts_imported where ts_imported.c_change_symbol = @a or ts_imported.c_change_symbol = @b [/code]Call it as Exec myproc 'A','B'Srinika |
 |
|
|
RyanRandall
Master Smack Fu Yak Hacker
1074 Posts |
Posted - 2006-07-19 : 11:35:02
|
| Srinika's suggestion is good if you have a fixed number of variables (2, in this case).Otherwise, refer to these articles...http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htmhttp://www.sommarskog.se/arrays-in-sql.htmlNote that neither article recommends using dynamic sql.Ryan Randallwww.monsoonmalabar.com London-based IT consultancy Solutions are easy. Understanding the problem, now, that's the hard part. |
 |
|
|
jsmith8858
Dr. Cross Join
7423 Posts |
|
|
mrleokarthik
Starting Member
16 Posts |
Posted - 2006-07-20 : 03:07:32
|
quote: Originally posted by harsh_athalye use dynamic sql as below:declare @Symbol varchar(20)Declare @Sql varchar(8000)declare @apos char(1) set @apos=''''set @Symbol = @apos +'A' + @apos + ',' + @apos + 'B' + @aposset @Sql = 'Delete from ts_imported where c_change_symbol in (' + @symbol + ')'Execute(@Sql)Harsh AthalyeIndia."Nothing is Impossible"
Dynamic SQL Works well.I appriciate our forum is very quick with relevant replies.Thanks to you everybody. |
 |
|
|
RyanRandall
Master Smack Fu Yak Hacker
1074 Posts |
Posted - 2006-07-20 : 05:03:46
|
quote: Dynamic SQL Works well.
You should note what the links I posted had to say about dynamic SQL...quote: The good ones:* The iterative method. Looping through a comma-separated list, and returning the elements in a table, either with a used-defined function (UDF) or a stored procedure. Decent performance, and easy to understand and easily extensible. * Using a table of numbers to unpack a comma-separated list, either in a UDF or an SP. The fastest of all methods for a list with delimiters. * Fixed-length array. Rather than using a comma-separated list, use a string where all elements have the same length. You unpack the string with a table of numbers in a UDF or SP. This is the fastest method I know of. * XML. Overkill for a comma-separated list, but marvellous for an array of structured data. Only possible on SQL 2000. Decent performance, but slower than the iterative method. The ones to stay away from: * Dynamic SQL. For a list of numbers, it may appear simpler than any other method, but there are permissions issues to consider. And messier to use for a list of strings. Performance is unacceptable for long input. It is probably the only viable method on SQL 6.5 though. * Making the List Into a SELECT. Transform a delimited list into an INSERT statement. Or many INSERT statements. Cute, but cannot handle input longer than ~3-5000 chars, and has no other particular benefit. * Really slow methods. Methods that uses charindex, patindex or LIKE. These solutions are just unbelievably slow even for short input.
quote: Dynamic SQL has its limitations, and is not something I would recommend. For starters, notice the "GRANT EXEC" command in the above script. That statement grants EXECUTE permission to the user WebUser. But that is not enough for WebUser to execute this stored procedure. The user executing dynamic SQL commands needs explicit permissions on the underlying tables, which is not something I would do on a production system. Because of this limitation, I added a "GRANT SELECT" command in the above script, to enable WebUser to run the stored procedure.
Ryan Randallwww.monsoonmalabar.com London-based IT consultancy Solutions are easy. Understanding the problem, now, that's the hard part. |
 |
|
|
prajey
Starting Member
2 Posts |
Posted - 2006-07-20 : 05:05:40
|
| hi thereif u got to pass a parameter with single quotes, then add a double quote b4 and after the parameter.Prabhakar Jeyaraman |
 |
|
|
|