﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>SQLServerCentral / SQL Server 2008 / T-SQL (SS2K8)  / error in stored procedure / Latest Posts</title><generator>InstantForum.NET v2.9.0</generator><description>SQLServerCentral</description><link>http://www.sqlservercentral.com/Forums/</link><webMaster>notifications@sqlservercentral.com</webMaster><lastBuildDate>Wed, 22 May 2013 09:43:25 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>[quote][b]Eugene Elutin (12/11/2012)[/b][hr][quote][b]Sean Pearce (12/11/2012)[/b][hr][code="sql"]ALTER PROCEDURE [dbo].[usp_delete]	@tablename sysname,	@pid int,	@pidname varchar(10)ASDECLARE @SQL NVARCHAR(MAX),		@Params NVARCHAR(MAX);SELECT	@SQL = 'DELETE FROM [' + @tablename + '] WHERE ' + @pidname + ' = @pid;',		@Params = '@pid INT';EXEC sp_executesql @SQL, @Params, @pid = @pid;[/code][/quote]Don't forget to test your sp by executing:[code="sql"]EXEC dbo].[usp_delete]	@tablename = 'sometable',	@pid int = 1,	@pidname = '1 = 1 OR 1 '[/code]:cool:It's a good idea to always protect your dynamic sql from injection[/quote]You can offer some protection by wrapping the execution statement.[code="sql"]ALTER PROCEDURE [dbo].[usp_delete]	@tablename sysname,	@pid int,	@pidname varchar(10)ASDECLARE @SQL NVARCHAR(MAX),		@Params NVARCHAR(MAX);SELECT	@SQL = 'DELETE FROM [' + @tablename + '] WHERE ' + @pidname + ' = @pid;',		@Params = '@pid INT';IF EXISTS(SELECT * FROM sys.columns WHERE name = @pidname AND OBJECT_NAME(object_id) = @tablename)BEGIN    EXEC sp_executesql @SQL, @Params, @pid = @pid;END;[/code]</description><pubDate>Tue, 11 Dec 2012 07:15:15 GMT</pubDate><dc:creator>Sean Pearce</dc:creator></item><item><title>RE: error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>I strongly recommend you do not go this approach of generic delete procedures.</description><pubDate>Tue, 11 Dec 2012 03:36:23 GMT</pubDate><dc:creator>GilaMonster</dc:creator></item><item><title>RE: error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>[quote][b]Sean Pearce (12/11/2012)[/b][hr][code="sql"]ALTER PROCEDURE [dbo].[usp_delete]	@tablename sysname,	@pid int,	@pidname varchar(10)ASDECLARE @SQL NVARCHAR(MAX),		@Params NVARCHAR(MAX);SELECT	@SQL = 'DELETE FROM [' + @tablename + '] WHERE ' + @pidname + ' = @pid;',		@Params = '@pid INT';EXEC sp_executesql @SQL, @Params, @pid = @pid;[/code][/quote]Don't forget to test your sp by executing:[code="sql"]EXEC dbo].[usp_delete]	@tablename = 'sometable',	@pid int = 1,	@pidname = '1 = 1 OR 1 '[/code]:cool:It's a good idea to always protect your dynamic sql from injection</description><pubDate>Tue, 11 Dec 2012 03:32:26 GMT</pubDate><dc:creator>Eugene Elutin</dc:creator></item><item><title>RE: error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>[code="sql"]ALTER PROCEDURE [dbo].[usp_delete]	@tablename sysname,	@pid int,	@pidname varchar(10)ASDECLARE @SQL NVARCHAR(MAX),		@Params NVARCHAR(MAX);SELECT	@SQL = 'DELETE FROM [' + @tablename + '] WHERE ' + @pidname + ' = @pid;',		@Params = '@pid INT';EXEC sp_executesql @SQL, @Params, @pid = @pid;[/code]</description><pubDate>Tue, 11 Dec 2012 01:15:12 GMT</pubDate><dc:creator>Sean Pearce</dc:creator></item><item><title>RE: error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>first ensure that the value you are getting in @pid is int or varchar. If column data type is varchar then use CAST for it.Hope, It will works for you :-P</description><pubDate>Thu, 06 Dec 2012 03:39:56 GMT</pubDate><dc:creator>kapil_kk</dc:creator></item><item><title>RE: error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>To make your statement work you have to convert @pid in the string concatenation.SET @SQL = 'delete from ' + @tablename + ' where '+ @pidname + ' = '+ cast( @pid as varchar(50) )To avoid sql injection you should not use dynamic statements like this at all. Write a separate delete procedure for every table where you want to delete data from.</description><pubDate>Thu, 06 Dec 2012 00:02:07 GMT</pubDate><dc:creator>WolfgangE</dc:creator></item><item><title>error in stored procedure</title><link>http://www.sqlservercentral.com/Forums/Topic1393292-392-1.aspx</link><description>ALTER PROCEDURE [dbo].[usp_delete] @tablename sysname, @pid int ,@pidname varchar(10)ASDECLARE  @SQL  varchar(500)SET @SQL  = 'delete from  ' + @tablename + ' where '+ @pidname + ' = '+ @pid [b]Conversion failed when converting the nvarchar value 'delete from  m_customer where cid = ' to data type in[/b]t.i get the above errorif i convert pid int to varchar i dont get error but the recod is not deletedwhts the best way toprevent sql injection and have database secured</description><pubDate>Wed, 05 Dec 2012 19:31:58 GMT</pubDate><dc:creator>ssurekha2000</dc:creator></item></channel></rss>