C# 混合表类型和其他类型作为存储过程c的参数#
我想问的是如何将多个参数传递给存储过程,其中一个参数是用户定义的表。当我尝试执行此操作时,显示以下错误: 插入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语句中指定的列数匹配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子
谢谢您需要将表名作为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注入的攻击