我有这个数组
$REV = Array
(
0 => 240,
1 => 241,
2 => 242,
3 => 243,
4 => 249
);
我现在使用下面的代码插入,将每个数组的元素存储在一行中,包含 $id、$userID、类型和日期
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', 'REV', 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
。您应该阅读本主题。
所以伪代码看起来像
插入 ... 选择 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,因为它具有更好的抽象层。希望对您有所帮助。
关于php - 如何使用存储过程 SQL SERVER 2008 R2(mssql) 插入 PHP 数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330557/