混合表类型与其他类型作为存储过程的参数c#

时间:2010-01-25 15:12:06

标签: c# stored-procedures parameters

我在询问如何将多个参数传递给存储过程,其中一个参数是用户定义的表。当我尝试这样做时,它显示了这个错误:

INSERT INTO BD(ID,VALUE,BID)     values((SELECT t1.ID,t1.Value FROM @Table AS t1),someintvalue) 这里@Table是用户定义的表参数。

Msg 116,Level 16,State 1,Procedure UpdateBD,Line 12 当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。 Msg 109,Level 15,State 1,Procedure UpdateBD,Line 11 INSERT语句中的列多于VALUES子句中指定的值。 VALUES子句中的值数必须与INSERT语句中指定的列数相匹配。

谢谢

1 个答案:

答案 0 :(得分:1)

您需要将表名作为varchar传递,并且您的查询也需要是varchar。它看起来像是:

CREATE PROCEDURE MyStoredProc(
    @MyTableNameParameter varchar(50) = null
)
AS

DECLARE @Query nvarchar(MAX)

SET @Query = N'SELECT * FROM ' + @MyTableNameParameter + ' WHERE 1=1'

EXEC (@Query)

GO

我不建议使用这种技术,因为它易受SQL注入攻击