我在询问如何将多个参数传递给存储过程,其中一个参数是用户定义的表。当我尝试这样做时,它显示了这个错误:
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语句中指定的列数相匹配。
谢谢
答案 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注入攻击