确切的说不行-SQL SERVER没有数组类型,ANSI SQL 92标准也不支持数组。但可用其它的方法来实现。1 You could simulate an array by passing one or more varchar(255) fields with comma-separated values and then use a WHILE loop with PATINDEX and SUBSTR to extract the values1、你可以使用几个VARCHAR(255)字段来模拟数组,字段中用逗号分开各个数据,然后使用循环和PATINDEX和SUBSTR分开这些数据。2 The more usual way to do this would be to populate a temporary table with the values you need and then use the contents of that table from within the stored-procedure Example of this below2、通常这种方法需要为这些数据创建一个临时表,然后在存储过程使用表中的内容。如下例create procedure mytest @MyParmTempTable varchar(30)asbegin-- @MyParmTempTable contains my parameter list 这个变量是包含参数的表名-- For simplicity use dynamic sql to copy into a normal temp tablecreate table #MyInternalList (list_item varchar( 2 ) not null)set nocount oninsert #MyInternalListselect from sysobjectscreate table #MyList (list_item varchar( 2 ) not null)insert #MyList values ( 'S' )insert #MyList values ( 'U' )insert #MyList values ( 'P' )exec mytest "#MyList"3 If all you wanted to do was use the array/list as input to an IN clause in a WHERE statement you could use :-3、如果你想在IN子句里使用输入的数组参数可以这样做:CREATE PROCEDURE sp_MyProcedure (@MyCommaDelimitedString
a是数组,s是指针,把a传给函数的形参s,所以s指向a这个数组这块空间。
a具有11个元素,下标从0到10,这11个元素都是存在的,虽然a[0]没有赋值 ,但空间是存在的,只不过是它的初值不确定而已。
//C#例
public void Get_PrecedureData()
{
OracleConnection connection = null;//Connection
OracleCommand oraCommand = new OracleCommand();
OracleParameter paramId = null;
OracleParameter paramTbl = null;
OracleParameter paramCur = null;
OracleRefCursor pInfoCur = null;
DataSet dtRtn = new DataSet();
//数据库连接
connection = new OracleConnection("User Id=scott;Password=tiger;Data Source=oracle");
connectionOpen();
oraCommandConnection = connection;
oraCommandParametersClear();
// 存储过程 设定
oraCommandCommandText = "PKG_TESTPROC_GET_DATA";
oraCommandCommandType = SystemDataCommandTypeStoredProcedure;
// 输入输出参数设定
// Varchar2型
paramId = oraCommandParametersAdd( "I_ID", OracleDbTypeVarchar2, ParameterDirectionInput );
// 数组类型参数设定
paramTbl = oraCommandParametersAdd( "I_TBL", OracleDbTypeVarchar2, ParameterDirectionInput );
// 将CollectionType 设为 PLSQLAssociativeArray
paramTblCollectionType = OracleCollectionTypePLSQLAssociativeArray;
//cursor 类型参数设定
paramCur = oraCommandParametersAdd("O_CUR", OracleDbTypeRefCursor, ParameterDirectionOutput );
//设置参数数组的大小
//注意:参数的Value 属性和ArrayBindSize 属性必须为元素个数相同的数组,且个数等于参数的Size 属性
int[] bindSize = new int[10];
string[] tblData = new string[10];
for(int ii = 0; ii < 10; ii++)
{
tblData[ii] = iiToString();//数值
bindSize[ii] = 10;//数值的大小
}
//数组参数设定
paramTblValue = tblData;
paramTblSize = 10;
paramTblArrayBindSize = bindSize;
//存储过程执行
oraCommandExecuteNonQuery();
//out的cursor值的读取
using(OracleDataAdapter da = new OracleDataAdapter())
{
if(paramCurValue != SystemDBNullValue)
{
pInfoCur = (OracleRefCursor)paramCurValue;
daFill(dtRtn, pInfoCur);
}
//取得记录数
ConsoleWriteLine("the number of record count is {0}", dtRtnTables[0]RowsCount);
}
oraCommandDispose();
connectionClose();
connectionDispose();
}
你先百度php数组转字符,中间用sql认识的,连接。自己查记得深
就是$id = "2,3";的效果
然后sql句子是select from table where id in ($id)
String数组传参方式
(1)public static void main(String[] args){
String[] temp= {"aa","bb" };
test(temp);
}
public static void test(String[] param){ }
(2)public static void main(String[] args){
test(new String[]{"aa","bb" });
}
public static void test(String[] param){ }
(3)这种方式编译通不过
public static void main(String[] args){
test({"aa","bb" });
}
public static void test(String[] param){ }
以上就是关于如何给SQL SERVER存储过程传递数组参数全部的内容,包括:如何给SQL SERVER存储过程传递数组参数、数组形参与数组实参之间数据的传递,、c#向pl/sql传送数组参数怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)