在下面的示例代码中,表名是一个输入参数。在这种情况下,如何避免使用sp_executesql
. 下面是示例代码,我试图用sp_executesql
它来避免它,但它不起作用。谁能告诉我如何纠正它?
ALTER PROC Test @param1 NVARCHAR(50),
@param2 INT,
@tblname NVARCHAR(100)
AS
BEGIN
DECLARE @sql NVARCHAR(1000)
SET @sql= N' select * from ' + @tblname
+ ' where name= @param1 and id= @param2';
PRINT @sql
EXEC Sp_executesql
@sql,
N'@param1 nvarchar(50), @param2 int',
@param1,
@param2;
END
EXEC Test
'John',
2,
' emp; delete from emp where id = 567; select * from emp '
输出:打印消息:
select * from emp; delete from emp where id = 567; select * from emp where name= @param1 and id= @param2;
所有输入参数都被完全替换,并删除了一行。请让我知道如何处理这种情况。