我有大约六个通用的、但相当复杂的存储过程和函数,我希望以更通用的方式使用它们。
理想情况下,我希望能够将表名作为参数传递给过程,因为目前它是硬编码的。
我所做的研究表明,我需要将过程中的所有现有SQL转换为使用动态SQL,以便从参数中拼接出动态表名,但是我想知道是否有一种更简单的方法,即以另一种方式引用该表?
例如:
SELECT * FROM @MyTable WHERE...如果是这样,我如何从表名中设置@MyTable变量?
我使用的是SQL Server 2005。
发布于 2010-07-28 02:50:29
动态SQL是实现这一点的唯一方法,但是如果您的应用程序需要这样做,我会重新考虑它的架构。SQL不太擅长“泛化”代码。当它被设计和编码来完成单独的任务时,它工作得最好。
从TableA中选择与从TableB中选择不同,即使这两个select语句看起来是一样的。可能存在不同的索引、不同的表大小、数据分布等。
您可以生成您自己的存储过程,这是一种常见的方法。有一个代码生成器,可以为您需要的表创建各种选择存储过程。每个表都有自己的SP,然后您可以将其链接到应用程序中。
我已经用T-SQL编写了这类生成器,但是您可以用大多数编程语言轻松地完成它。这是非常基本的东西。
再补充一件事,自从Scott E提到ORMs之后...您还应该能够在大多数复杂的ORM中使用这些存储过程。
发布于 2010-07-28 02:48:42
您必须使用动态sql。但是不要这么做!您最好使用ORM。
发布于 2010-07-28 02:50:46
EXEC(N'SELECT * from ' + @MyTable + N' WHERE ... ')https://stackoverflow.com/questions/3346842
复制相似问题