如何给SQL SERVER存储过程传递数组参数

如何给SQL SERVER存储过程传递数组参数,第1张

确切的说不行-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传送数组参数怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10146543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存