加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 动态SQL(传递表名称作为参数)

发布时间:2020-12-12 08:51:23 所属栏目:MsSql教程 来源:网络整理
导读:我想编写一个存储过程,它将使用一个参数,这将是表的名称. 例如: @tablename ParameterSELECT * FROM @tablename 这怎么可能? 我写道: set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[GetAllInterviewQuestions]@Alias varchar = null
我想编写一个存储过程,它将使用一个参数,这将是表的名称.

例如:

@tablename << Parameter

SELECT * FROM @tablename

这怎么可能?

我写道:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetAllInterviewQuestions]
@Alias varchar = null
AS
BEGIN
Exec('Select * FROM Table as ' @Alias) 
END

但是它表示@Alias附近的语法不正确.

解决方法

那么,首先你从你的字符串中省略了”.这样做的方式远非理想,但你可以做
DECLARE @SQL varchar(250)
SELECT @SQL = 'SELECT * FROM ' + QuoteName(@Alias)
Exec(@SQL)

不过,我强烈建议您重新思考如何做到这一点.生成动态SQL通常会导致SQL注入漏洞,并使SQL Server(和其他DB)更难处理查询的最佳方法.如果您有一个可以返回任何表的存储过程,那么您首先将它作为存储过程几乎没有任何好处,因为它将无法在优化方面做得太多,而且也大大削弱了安全利益.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读