sql-server – 动态SQL(传递表名称作为参数)
发布时间:2020-05-23 07:19:50 所属栏目:MsSql 来源:互联网
导读:我想编写一个存储过程,它将使用一个参数,这将是表的名称. 例如: @tablename ParameterSELECT * FROM @tablename 这怎么可能? 我写道: set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[GetAllInterviewQuestions]@Alias va
|
我想编写一个存储过程,它将使用一个参数,这将是表的名称. 例如: @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)更难处理查询的最佳方法.如果您有一个可以返回任何表的存储过程,那么您首先将它作为存储过程几乎没有任何好处,因为它将无法在优化方面做得太多,而且也大大削弱了安全利益. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sp_executesql 使用复杂的Unicode 表达式错误的解
- sql-server – 实体框架代码首先使用SQL Server同
- sql – 在DB2中拆分VARCHAR以检索其中的值
- MYSQL updatexml()函数报错注入解析
- 更改SQL Server 2005数据库中tempdb位置的方法
- SQL Server 常用命令行操作(启动、停止、暂停)的
- sql – postgres:用户真正在做什么’select *’
- sql – INSERT IF NOT EXISTS但是返回身份的方式
- 数据库 – 我可以配置没有数据源的Grails吗?
- ORDER BY在Sql Server 2008视图中
热点阅读
