我需要将参数作为表值传递给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