开发者社区> 问答> 正文

将3个输入放入SQL Server中的存储过程

有一个学生表,带有ID和Name列。但是,想要使用存储过程中的参数来获得:

select * from Student where ID = value; 一会儿,我使用了这段代码。无法承受。此外,我收到此错误消息:

select * from [学生],其中ID = 2消息203,级别16,状态2,过程FindTblName,行11 [批处理开始第28行]名称'select * from [学生],其中ID = 2'是无效的标识符。

create procedure FindTblName @tblName varchar(100), @IDName varchar(10), @IDValue int as begin

declare @sql varchar(max) set @sql = 'select * from '+ QUOTENAME(@tblName) + ' where ' + @IDName + ' = ' + convert(nvarchar(2),@IDValue) print @sql exec @sql end

exec FindTblName @tblName = Student, @IDName = ID, @IDValue = 2;

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 11:34:13 512 0
1 条回答
写回答
取消 提交回答
  • 如果必须执行类似的操作,然后正确地引用对象名称并参数化参数。然后将您的对象名称作为nvarchar,而不是未知的“对象”类型传递:

    CREATE PROC dbo.FindTblName @TblName sysname , @IDName sysname, @IDValue int AS BEGIN

    DECLARE @SQL nvarchar(MAX);
    
    SET @SQL = N'SELECT * FROM dbo.' + QUOTENAME(@TblName) + N' WHERE ' + QUOTENAME(@IDName) + N' = @IDValue;';
    EXEC sp_executesql @SQL, N'@IDValue int', @IDValue;
    

    END; GO

    EXEC dbo.FindTblName @TblName = N'Student', @IDName = N'ID', @IDValue = 2;

    2019-11-18 11:34:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载