Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 混合表类型和其他类型作为存储过程c的参数#_C#_Stored Procedures_Parameters - Fatal编程技术网

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

C# 混合表类型和其他类型作为存储过程c的参数#,c#,stored-procedures,parameters,C#,Stored Procedures,Parameters,我想问的是如何将多个参数传递给存储过程,其中一个参数是用户定义的表。当我尝试执行此操作时,显示以下错误: 插入BD(ID、值、投标) 值((从@Table中选择t1.ID、t1.Value作为t1),someintvalue) 这里@Table是用户定义的表参数 Msg 116,16级,状态1,程序更新,第12行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式。 Msg 109,15级,状态1,程序更新,第11行 INSERT语句中的列多于values子句中指定的值。values子

我想问的是如何将多个参数传递给存储过程,其中一个参数是用户定义的表。当我尝试执行此操作时,显示以下错误:

插入BD(ID、值、投标) 值((从@Table中选择t1.ID、t1.Value作为t1),someintvalue) 这里@Table是用户定义的表参数

Msg 116,16级,状态1,程序更新,第12行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式。 Msg 109,15级,状态1,程序更新,第11行 INSERT语句中的列多于values子句中指定的值。values子句中的值数必须与INSERT语句中指定的列数匹配


谢谢

您需要将表名作为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注入的攻击

您需要将表名作为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注入的攻击