0

我知道我可以使用表值参数作为另一个选项,并且我已经能够实现它。我尝试使用这种方法(表变量而不是表值)的原因是因为我正在学习并且我想学习如何通过存储过程插入数据库的其他方法。

这是我当前的查询:

CREATE PROCEDURE TVar
(
DECLARE @TblVar TABLE
(Product nvarchar(max), Qty int)

)
AS
Insert Into sample_tbl Select * FROM @TblVar

是否有可能采用这种方法,其中在 C# 代码中我将使用数据表作为参数传递,这可以在使用表值参数时完成。执行查询时出现错误。

这是错误:

Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'DECLARE'.
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.
4

1 回答 1

6

是的。您可以使用表值参数作为存储过程的参数,并且可以从 C# 调用。

您需要单独声明一个TABLE TYPE

CREATE TYPE MyTableType AS TABLE 
(
    Product nvarchar(max),
    Qty int
);
GO

然后像这样使用:

CREATE PROCEDURE TVar   
(   
   @TblVar as dbo.MyTableType READONLY  
)   
AS  
...

这些文章展示了如何构建 .NETDataTable以从 C# 调用存储过程:

于 2012-06-08T01:55:29.547 回答