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