Delphi - 将表值参数传递给SQL Server存储过程

use*_*328 4 sql sql-server delphi stored-procedures

我需要将参数作为SQL Server中存储过程的表值传递.如何在Delphi中处理这个?

bum*_*mmi 5

据我所知,没有简单的方法来传递Table参数,使用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
Run Code Online (Sandbox Code Playgroud)

您可以像这样调用该过程:

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
Run Code Online (Sandbox Code Playgroud)