首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程,将表名作为参数传递

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

Stack Overflow用户
提问于 2010-07-28 02:47:03
回答 5查看 6.7K关注 0票数 2

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

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

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

例如:

代码语言:javascript
复制
SELECT * FROM @MyTable WHERE...

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

我使用的是SQL Server 2005。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-28 02:50:29

动态SQL是实现这一点的唯一方法,但是如果您的应用程序需要这样做,我会重新考虑它的架构。SQL不太擅长“泛化”代码。当它被设计和编码来完成单独的任务时,它工作得最好。

从TableA中选择与从TableB中选择不同,即使这两个select语句看起来是一样的。可能存在不同的索引、不同的表大小、数据分布等。

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

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

再补充一件事,自从Scott E提到ORMs之后...您还应该能够在大多数复杂的ORM中使用这些存储过程。

票数 3
EN

Stack Overflow用户

发布于 2010-07-28 02:48:42

您必须使用动态sql。但是不要这么做!您最好使用ORM。

票数 1
EN

Stack Overflow用户

发布于 2010-07-28 02:50:46

代码语言:javascript
复制
EXEC(N'SELECT * from ' + @MyTable + N' WHERE ...     ')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3346842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档