Geben Sie einen einzelnen Parameter mit Kommas an SQL gespeicherte Prozedur

Ich verwende visuelle FoxPro und SQL. Ich schaffe Berichte in Visual Foxpro mit SQL-data. Alle Verbindungen sind eingestellt. hier ist ein Shop-Prozedur und ich möchte Parameter wie geben

@A=''AA','BB','CC'' 

aber wegen Komma handelt es sich um separate Parameter, die für den IN-Operator verwendet werden. where V_TYPE in (@A)

Der Parameterwert stammt von Visual FoxPro. '' AA ',' BB ',' CC '' durch das VFP-Programm. Dies ist ein einzelner Parameter für die gespeicherte Prozedur. z.B. EXEC testProc '' AA ',' BB ',' CC ''. aber wegen des Kommas seine Handlung wie drei para

bitte sag mir, wie soll ich so etwas geben Danke im Voraus!

Leider haben Sie Ratschläge gegeben, die Sie überhaupt nicht verwenden sollten und weit offen für SQL-Injection-Attacken. Stattdessen gibt es mehrere sichere Möglichkeiten, das zu tun. Einer von ihnen ist es, eine Temp-Tabelle im SQL-server zu erstellen, dort Werte einzufügen und den inneren Join anstelle einer IN-Abfrage zu verwenden. Ein anderer path ist, eine Prozedur zu verwenden, um kommagetrennte Werte auf eine Tischserverseite zu parsing und sie in einer Verknüpfung zu verwenden. Noch ein anderer path ist, einen XML-datastring zu übergeben, eine Tabelle auf server-Seite zu erstellen und einen Join zu machen. Unten ist ein Beispiel mit XML (für die anderen 2 Beispiele sehen hier – Samples ):

  LOCAL lnHandle, cXML, myInQuery TEXT TO myInQuery noshow DECLARE @hDoc int exec sp_xml_preparedocument @hDoc OUTPUT, ?m.cXML SELECT * FROM [Northwind]..[Products] WHERE ProductID IN ( SELECT myID FROM OPENXML(@hDoc, ?m.cNodename, 1) WITH (myid int) ) EXEC sp_xml_removedocument @hDoc ENDTEXT ** Local cursor CREATE CURSOR test (myID i) INSERT INTO test VALUES (1) INSERT INTO test VALUES (3) INSERT INTO test VALUES (5) ** Local cursor CURSORTOXML('test','cXML',2) cNodeName = '/VFPData/test' && CursorToXML by default use VFPData as root, and tablename in lowercase for rows lnHandle = SQLSTRINGCONNECT('Driver={SQL Native Client};server=.\SQLExpress;Trusted_Connection=yes') SQLEXEC(m.lnHandle, m.myInQuery, 'result') SQLDISCONNECT(m.lnHandle) SELECT result BROWSE 

Anmerkung: Mit diesen Arten von Ansätzen können Ihre Werte irgendeine Art sein, ohne die Sorge, Zitate oder andere character darin zu haben (int, char, datetime …).