gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:42:36 27 4
gpt4 key购买 nike

我想编写一个存储过程,它将使用一个参数,该参数将是表名称。

例如:

@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 nvarchar(max)
SELECT @SQL = 'SELECT * FROM ' + QuoteName(@Alias)
Exec(@SQL)

但是,我强烈建议您重新考虑如何做到这一点。生成动态 SQL 通常会导致 SQL 注入(inject)漏洞,并使 SQL Server(和其他数据库)更难找出处理查询的最佳方法。如果您有一个可以返回任何表的存储过程,那么您实际上实际上并没有从它作为存储过程中获得任何好处,因为它无法在优化方面做太多事情,而且您很大程度上也削弱了安全优势。

关于sql-server - 动态 SQL(将表名作为参数传递),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com