当前位置: 首页 > 面试题库 >

存储过程,将表名作为参数传递

从焱
2023-03-14
问题内容

我有大约六种通用但相当复杂的存储过程和函数,我想以一种更通用的方式使用它们。

理想情况下,我希望能够将表名作为参数传递给过程,因为当前它是硬编码的。

我所做的研究表明,我需要将过程中所有现有的SQL转换为使用动态SQL,以便从参数中拼接动态表名称,但是我想知道是否还有一种更简便的方法可以通过另一种方式引用该表?

例如:

SELECT * FROM @MyTable WHERE...

如果是这样,如何从表名设置@MyTable变量?

我正在使用SQL Server 2005。


问题答案:

动态SQL是执行此操作的唯一方法,但是如果需要,我会重新考虑应用程序的体系结构。SQL不太擅长“通用”代码。当它经过设计和编码以执行单个任务时,它的效果最佳。

即使选择语句看起来相同,从TableA中进行选择也与从TableB中进行选择不同。可能有不同的索引,不同的表大小,数据分布等。

您可以生成自己的存储过程,这是一种常见的方法。有一个代码生成器,可以为所需的表创建各种选择存储过程。每个表都有其自己的SP,然后可以将其链接到您的应用程序中。

我已经用T-SQL编写了这类生成器,但是您可以使用大多数编程语言轻松地做到这一点。这是非常基本的东西。

自从Scott E提出ORM以来,又增加了一件事…您还应该能够将这些存储过程与最复杂的ORM一起使用。



 类似资料:
  • 问题内容: 我正在创建一些存储过程来管理我的数据库。特别是,我想创建一个存储过程来编辑特定行的一列,但是我想通过将列名作为参数传递来做到这一点。 那就是我想做的 使用该参数,我找到了要编辑的特定行,并且我想使用该参数来仅编辑我想要的列。 正如我在其他主题上所读到的那样,我已经尝试使用或定义局部变量,但没有找到解决方案。 有什么帮助吗? 问题答案: 您将需要使用 动态SQL : 请注意,正如Paul

  • 问题内容: 我正在使用一个存储过程,在其中发送数据库中其类型为的存储过程,并且还声明parameter 。 当我将列名传递为float时,它给出了错误: 消息8114,将数据类型nvarchar转换为float时出错。 这是我的测试查询 当我将参数类型更改为时,它给了我这个错误: 消息8117,操作数数据类型varchar对avg运算符无效。 我该如何解决? 更新 : 这是我的存储过程: 问题答案

  • 问题内容: 例如,这不起作用: 产生: 但是,这按预期工作: 在select语句中使用参数作为表名需要什么语法?这有可能吗? 问题答案: 准备好的语句是您所需要的。

  • 问题内容: 我有一个存储过程,它将列名和表名作为参数。 此过程给我一个错误: 必须声明标量变量@TableName 尽管我已经在顶部声明了它。 问题答案: 使用动态SQL:

  • 问题内容: 我已经写了一个存储过程。除了将表名作为输入参数之外,它都工作正常。 让我们在MySQL中查看我的proc: 存储过程的调用参数: 在这里,服务名称参数可以正常工作。但是,如果我将newsInfoTable变量作为表输入参数包括在内,则会显示错误。 表’db_test.newsinfotable’不存在 为什么只对表参数发生这种情况?如何从此错误中检索或 如何将表名作为参数传递给存储过程

  • 问题内容: 我有一个带有以下参数的T-SQL存储过程 我想知道是否可以通过as参数传递结果: 我尝试了类似的方法,但是它不起作用。 问题答案: 您在示例中编写的SELECT查询可能会带回多行(您的SELECT不具有WHERE子句或TOP(n))。如果您打算让过程使用一组“表格”参数,那么从SQL Server 2008开始,您可以使用表值参数。 这涉及到创建用户定义的表表,这无疑将意味着调整存储过