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

前端之家收集整理的这篇文章主要介绍了sql-server – 动态SQL(传递表名称作为参数)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想编写一个存储过程,它将使用一个参数,这将是表的名称.

例如:

@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)更难处理查询的最佳方法.如果您有一个可以返回任何表的存储过程,那么您首先将它作为存储过程几乎没有任何好处,因为它将无法在优化方面做得太多,而且也大大削弱了安全利益.

猜你在找的MsSQL相关文章