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)更难处理查询的最佳方法.如果您有一个可以返回任何表的存储过程,那么您首先将它作为存储过程几乎没有任何好处,因为它将无法在优化方面做得太多,而且也大大削弱了安全利益. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |