2016-04-09 4 views
1

I eine gespeicherte Prozedur schreiben, wieFehler bei der Konvertierung, wenn die VARCHAR-Wert-Umwandlungs ‚select FNo aus Apts wo Namen wie‚% Jagd%‘‘ in dem Datentyp int

IF @Action=101 
BEGIN 

select a.name as Name, 
     m.sccity as sccity, 
     ISNULL(c.coursetype,' ')+': '+ISNULL(c.coursename,'')+', CODE:'+Convert(varchar(4),c.course) as 'Course Details', 
     replace(convert(varchar(20),a.dob,106),' ','-') as dob, 
     a.gender as gender, 
     a.medium as medium, 
     a.cat as cat, 
     a.oldfno as oldfno, 
     a.bgroup as bgroup, 
     a.add1 as add1, 
     a.add2 as add2, 
     a.add3 as add3, 
     a.city as city, 
     a.district as district, 
     a.state as state, 
     a.pin as pin, 
     a.std as std, 
     a.phone1 as phone1, 
     a.phone2 as phone2, 
     a.mobile1 as mobile1, 
     a.mobile2 as mobile2, 
     a.pcourse as pcourse 
from apts a, courses c ,mastsc m 
where c.course=a.course 
and a.studyccode=m.studyccode 
and a.isdeleted=0 and c.isdeleted=0 
and m.isdeleted=0 and c.course>0 
and a.fno in (@subquery) 

END 

folgt, ist es zwei variable @Action Typ integer und @subquery type varchar @subquery wird in IN() -Klausel übergeben. Aber wenn ich dies ausführe und eine Unterabfrage übergebe, bekomme ich einen Fehler. Bitte geben Sie eine Lösung Danke im Voraus

+0

a.fno in (cast (@subquery als int)) END – TharunRaja

Antwort

0

Versuchen Sie folgendes:

a.fno in (cast(@subquery as int)) END 
+0

nicht seine nicht funktioniert .same Fehler Fehler bei der Konvertierung, wenn die Varchar-Wert-Umwandlungs 'wählen -fno von apts wo mobile1 wie% ajay%' zum Datentyp int. – user6180198

0

Sie müssen hier dynamische SQL verwenden.

Setzen Sie Abfrage in eine Variable auswählen wie:

DECLARE @sql nvarchar(max) = N' 
--here comes your query 
and a.fno in ('[email protected]+')' 

EXEC sp_executesql @sql 

Aber diese Methode ist extrem anfällig für SQL-Injektionen, besser eine andere Logik für die Bereitstellung von Unterabfrage zu Ihrem SP verwenden. Zum Beispiel:

DECLARE @sql nvarchar(max) = N' 
--here comes your query 
and a.fno in (SELECT fno FROM apts WHERE mobile1 like ''%'[email protected]+'%'')' 

EXEC sp_executesql @sql 
Verwandte Themen