我有大约六种通用但相当复杂的存储过程和函数,我想以一种更通用的方式使用它们。
理想情况下,我希望能够将表名作为参数传递给过程,因为当前它是硬编码的。
我所做的研究表明,我需要将过程中所有现有的SQL转换为使用动态SQL,以便从参数中拼接动态表名称,但是我想知道是否还有一种更简便的方法可以通过另一种方式引用该表?
例如:
SELECT * FROM @MyTable WHERE...
如果是这样,如何从表名设置@MyTable变量?
我正在使用SQL Server 2005。
动态SQL是执行此操作的唯一方法,但是如果需要,我会重新考虑应用程序的体系结构。SQL不太擅长“通用”代码。当它经过设计和编码以执行单个任务时,它的效果最佳。
即使选择语句看起来相同,从TableA中进行选择也与从TableB中进行选择不同。可能有不同的索引,不同的表大小,数据分布等。
您可以生成自己的存储过程,这是一种常见的方法。有一个代码生成器,可以为所需的表创建各种选择存储过程。每个表都有其自己的SP,然后可以将其链接到您的应用程序中。
我已经用T-SQL编写了这类生成器,但是您可以使用大多数编程语言轻松地做到这一点。这是非常基本的东西。
自从Scott E提出ORM以来,又增加了一件事…您还应该能够将这些存储过程与最复杂的ORM一起使用。