2012-06-08 34 views
0

我知道我可以使用表值参数作为另一个选项,我已经能够实现它。我试图使用这种方法(表变量不是表值)的原因是因为我正在学习,我想了解如何通过存储过程插入数据库的其他方法。是否可以在C#/ SQL Server中使用表变量作为存储过程的参数?

下面是当前查询我:

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 ')'. 

回答

6

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

您需要单独申报TABLETYPE

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

,然后使用像这样:

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

这些文章显示了如何建立一个.NET DataTable调用从C#中的存储过程:

+0

我已经能够使用表值,实际上,我想有一个表变量作为参数,在参数的C#代码中使用数据表来实现。非常感谢您的回应。 –

+0

你的评论似乎不符合你在你的问题中所说的话?无论如何,很高兴提供帮助。 –

+0

@MitchWheat是否可以解决另一方向移动数据的问题,例如:存储的proc会导致OUTPUT TVP,然后将这些数据放入C#DataTable中,然后将该表清空为Excel? – whytheq

相关问题