Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
mburge
Starting Member
3 Posts |
Posted - 2010-08-24 : 11:45:43
|
| Hi All,Sorry if this is a basic question but I'm new to SQL so would appreciate the helpThis is my stored procedure:-------------Declare @SQL varchar(1000)SET @SQL = 'Select memberpolicies.policyid, memberpolicies.StartDate, memberpolicies.Enddate, members.firstname, members.lastname, members.postalcode, members.telephone, policytypes.description from memberpolicies inner join members on memberpolicies.UserId = members.UserId inner join policytypes on memberpolicies.policytypeid = policytypes.policytypeid Where 1 = 1'IF @ID <> '' SET @SQL = @SQL + ' AND memberpolicies.policyid = ' + @IDEXEC(@SQL)----------The procedure works fine if i pass a NULL value. However It seems to be detecting @ID as a string. I have tried using Cast() with no luck.The Error message i get is: Conversion failed when converting the varchar value to data type intany help or direction to suitable reading material would be great. |
|
|
MSquared
Yak Posting Veteran
52 Posts |
Posted - 2010-08-24 : 11:55:33
|
it's because you are missing the quotes around the ID Value. You need to be careful when running dynamic SQL like this since it it can be subject to SQL injection. There's a couple of ways to handle this. You can use dynamic sql or you can perform the logic in the where clause (i.e. memberpolicies.policyid = IsNull(@id, memberpolicies.policyid) and not use dynamic sql. But here is the safer dynamic approach.DECLARE @sql nvarchar(2000), @Parms nvarchar(int)set @parms = N'@Id varchar(10)'SET @SQL = 'Select memberpolicies.policyid, memberpolicies.StartDate, memberpolicies.Enddate, members.firstname, members.lastname, members.postalcode, members.telephone, policytypes.description from memberpoliciesinner join membersonmemberpolicies.UserId = members.UserIdinner join policytypesonmemberpolicies.policytypeid = policytypes.policytypeidWhere 1 = 1'IF @ID <> '' SET @SQL = @SQL + ' AND memberpolicies.policyid = @ID'EXECUTE sp_executesql @SQL, @Parms, @ID = @ID For Faster results please follow the posting guidelines herehttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspx |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-08-25 : 09:25:47
|
why do you need dynamic sql for this? wont the following suffice?Select memberpolicies.policyid, memberpolicies.StartDate, memberpolicies.Enddate, members.firstname, members.lastname, members.postalcode, members.telephone, policytypes.description from memberpoliciesinner join membersonmemberpolicies.UserId = members.UserIdinner join policytypesonmemberpolicies.policytypeid = policytypes.policytypeidWhere memberpolicies.policyid = @IDOR ISNULL(@ID,'') = '' ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
|
|
|
|
|