我需要將參數作爲表值傳遞給SQL Server中的存儲過程。如何在Delphi中處理這個問題?Delphi - 將表值參數傳遞給SQL Server存儲過程
4
A
回答
5
據我所知,在那裏沒有簡單的方法來傳遞表參數,使用Delphi的組件。 解決方法是使用可用於填充類型化表變量的臨時表。
假設你的定義是這樣的:
CREATE TYPE MyTableType AS TABLE
(ID int
, Text varchar(100))
GO
CREATE PROCEDURE P_Table
@Tab MyTableType READONLY
AS
BEGIN
SET NOCOUNT ON;
Select * from @Tab -- dummy operation just return the dataset
END
GO
你可以這樣調用的程序:
var
i: Integer;
begin
// we create a temporary table since a table variable can obly be used for a single call
DummyDataset.Connection.Execute('Create Table #mytemp(ID int,Text varchar(100))');
DummyDataset.CommandText := 'Select * from #mytemp';
DummyDataset.Open;
for i := 0 to 10 do
begin
DummyDataset.Append;
DummyDataset.Fields[0].Value := i;
DummyDataset.Fields[1].Value := Format('A Text %d', [i]);
DummyDataset.Post;
end;
MyDataset.CommandText := 'Declare @mytemp as MyTableType '
+ 'Insert into @mytemp select * from #mytemp ' // copy data to typed table variable
+ 'EXEC P_Table @Tab = @mytemp';
MyDataset.Open;
DummyDataset.Connection.Execute('Drop Table #mytemp');
end
+0
嗨Bummi,感謝您的快速回答。是否有可能使用clientdataset將表值參數傳遞給delphi。 – user3733328
0
從http://msftdpprodsamples.codeplex.com/wikipage?title=SS2008%21Readme_Table-Valued%20Parameters樣本下載是用C++編寫,但可以很容易地轉換爲德爾福。
一旦轉換的代碼德爾福,你可以使用類似下面讓結果集通過老好人ADO訪問:
SourcesRecordset := CreateADOObject(CLASS_Recordset) as _Recordset;
RSCon := SourcesRecordset as ADORecordsetConstruction;
RSCon.Rowset := rowset;
LDataSet := TADODataSet.Create(nil);
try
// Only doing the first result set
LDataSet.Recordset := SourcesRecordset;
while not LDataSet.Eof do
begin
//... something
LDataSet.Next;
end;
finally
LDataSet.Free;
end;
注意CreateADOObject
是Data.Win.ADODB.pas
一個私人的功能,但它是相當不重要的。
相關問題
- 1. 通過Delphi傳遞SQL Server存儲過程參數名稱
- 2. C#Winforms - 如何將參數傳遞給SQL Server存儲過程
- 3. 問題將XML參數傳遞給SQL Server存儲過程
- 4. 將xml字符串參數傳遞給SQL Server存儲過程
- 5. 將一個布爾參數傳遞給SQL Server存儲過程
- 6. 使用PHP PDO將參數傳遞給SQL Server存儲過程
- 7. 將參數傳遞給存儲過程
- 8. 將列表代替sql參數傳遞給存儲過程
- 9. 將許多值傳遞給SQL Server存儲過程
- 10. 將複選框值傳遞給SQL Server存儲過程
- 11. 如何將表參數傳遞給EF Core中的SQL Server存儲過程?
- 12. 將表值參數傳遞給SQL CLR存儲過程的價值是什麼?
- 13. 將數組傳遞給SQL Server存儲過程
- 14. 將數據集傳遞給SQL Server存儲過程
- 15. 如何將多個參數傳遞到SQL Server存儲過程
- 16. 將多個參數傳遞到SQL Server存儲過程
- 17. 在SQL Server存儲過程中使用參數傳遞表名
- 18. 如何將可變數量的參數傳遞給SQL Server存儲過程?
- 19. SQL LOOP將臨時表中的值作爲參數傳遞給存儲過程
- 20. 將參數傳遞給c中的sql存儲過程#
- 21. 如何將參數傳遞給SQL存儲過程?
- 22. 使用sql任務將參數傳遞給存儲過程
- 23. SQL Server 2012 - 將存儲過程名稱傳遞給另一個存儲過程
- 24. 傳遞參數給存儲過程
- 25. Sql Server - 將數組傳遞給過程
- 26. 將datatable作爲參數傳遞給SQL Server存儲過程從VB.net
- 27. SQL Server:使用動態查詢將可空參數傳遞給存儲過程
- 28. 如何將schema作爲參數傳遞給sql server中的存儲過程?
- 29. 使用OpenXML將多個參數傳遞給SQL Server存儲過程
- 30. 如何將Table-Valued參數從java傳遞給sql server存儲過程?
[Devart SDAC](http://forums.devart.com/viewtopic.php?f=6&t=24223)支持TVP,但是ADO(Delphi TADOxxx組件)[不支持TVP](http:// stackoverflow的.com /問題/ 1883852 /經典ADO和 - 表值參數-在存儲過程)。 – whosrdaddy
感謝您的回覆@whosrdaddy – user3733328