![](/img/trans.png)
[英]PHP PDO : How to call stored procedure to pass comma separated string to parameter
[英]How can I pass a comma-separated list of integers from PHP as a parameter to a stored procedure in SQL Server 2008?
希望我能以正確的方式解決這個問題,如果不是的話,我更願意學習如何做得更好。
我需要將一個逗號分隔的整數列表(總是正整數,沒有小數)傳遞給存儲過程。 然后,存儲過程將使用WHERE子句的IN運算符中的整數:
WHERE [PrimaryKey] IN (1,2,4,6,212);
前端是PHP並且通過ODBC建立連接,我嘗試將參數包裝在單引號中,並在列表到達查詢之前在存儲過程中將其過濾掉,但這似乎不起作用。
我得到的錯誤是:
將varchar值'1,2,4,6,212'轉換為數據類型int時轉換失敗。
我以前從未這樣做過,迄今為止的研究沒有取得任何積極成果。
首先,讓我們使用SQL函數來執行分隔數據的拆分:
CREATE FUNCTION dbo.Split
(
@RowData nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Data nvarchar(100)
)
AS
BEGIN
Declare @Cnt int
Set @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
Set @Cnt = @Cnt + 1
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END
要使用它,您只需將函數傳遞給分隔字符串以及分隔符,如下所示:
SELECT
*
FROM
TableName
WHERE
ColumnName IN (SELECT Data FROM dbo.Split(@DelimitedData, ','))
如果由於數據類型仍有問題,請嘗試:
SELECT
*
FROM
TableName
WHERE
ColumnName IN (SELECT CONVERT(int,Data) FROM dbo.Split(@DelimitedData, ','))
您可以傳遞逗號單獨的值列表。 但是,您不能在in
語句中使用它們。 你可以這樣做:
where ','+@List+',' like '%,'+PrimaryKey+',%'
也就是說,您希望查看該值是否存在。 我正在使用SQL Server語法進行連接,因為問題標記為Microsoft。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.