我有这个阵列
$REV = Array ( 0 => 240,1 => 241,2 => 242,3 => 243,4 => 249 );
我现在使用此代码插入,将每个数组的元素存储在$id,$userID,Type和Date的行中
if (!empty($REV)) { foreach ($REV as $val_rev) { $values_rev[] = "('" . $ID . "','REV','" . $val_rev . "','" . $IDUSER . "',GETDATE())"; } $values_rev_insert = implode(',',$values_rev); $query_rev = "insert into dbo.CCLine (ID,CCType,CSID,IdUSer,DateCreated)values" . $values_rev_insert; mssql_query($query_rev); }
但我想要的是可以使用这个存储过程,但我不知道如何使用sp一次插入:
$stmt = mssql_init('sp_insertRev'); mssql_bind($stmt,'@ID',$ID,sqlINT4); mssql_bind($stmt,'@CCType',sqlVARCHAR);
该阵列在这里不起作用
mssql_bind($stmt,'@CSID',$val_rev,sqlINT4);//An example
mssql_bind($stmt,'@IdUSer',$IDUSER,sqlCHAR); $result = mssql_execute($stmt);
我如何将此SP与阵列一起使用
CREATE PROCEDURE [dbo].[sp_HCCInsert] @ID int,@CCType varchar(10),@CSID varchar(10),@IdUSer char(15) AS BEGIN SET NOCOUNT ON; DECLARE @CCID as INT INSERT INTO [dbo].[CCLine] ([ID],[CCType],[CSID],[IdUSer],[DateCreated]) VALUES (@ID,@CCType,@CSID,@IdUSer,GETDATE()) SET @CCID = @@IDENTITY Select @CCID as CCID END
解决方法
我在
this post找到了解决问题的方法
所有这些都是关于将数组作为XML字符串传递给过程,在过程中它是在带有OPENXML函数的INSERT SELECT语句中使用的.
CREATE PROCEDURE [dbo].[sp_HCCInsert] ( @XMLDoc XML )
然后在MSsql中使用函数OPENXML.你应该阅读这个主题.
所以伪代码看起来像
INSERT … SELECT OPENXML(@XML …)
在阅读完并满足您的需求后,只需将XML传递给过程即可.
一些关于OPENXML的有用链接
> http://msdn.microsoft.com/pl-pl/library/ms175160.aspx
> Using OPENXML in SQL Server 2008 stored proc – INSERT order differs from XML document
> http://www.informit.com/articles/article.aspx?p=26499
此外,我建议使用PDO,因为它有更好的抽象层.我希望它对你有所帮助.