我有一个存储过程,此时将返回一个projectID列表。我想扩展它以返回一些额外的信息来确定特定用户是否有权访问此项目。替代动态SQL函数
要确定用户是否具有访问权限,我需要在名为'Project_XXX'的表中查找用户,其中XXX是projectID。是的,这是令人震惊的数据库设计,但遗憾的是我无能为力。我的第一反应是,我可以用一个函数作为这样的:
SELECT ProjectID WHERE [criteria] AND myfunc(ProjectID, @username)=1
但是,由于查找需要运行它告诉我,我不能这样做动态SQL。
这使我可以选择将我的逻辑放入存储过程,但是我的选择语法并不简单。
我能想到的方法是运行select来获取projectID列表,然后在该表上运行一个指针来调用我的存储过程,但是我停止思考,因为它看起来太复杂了......
那么有没有什么办法可以做到我想要的类似简单的语法以上?有没有办法让用户函数返回基于动态SQL?如上所述,有没有一种很好的方式来使用存储过程?我确信我错过了一些明显的东西 - 尽管我很少需要做任何与SQL相关的事情。 ;-)
我还要重申,我知道深层的问题是愚蠢的个别项目表,但这不是一朝一夕所能改变。
我曾经考虑过这个问题,但我怀疑每次创建新项目时都必须将项目添加到视图中来解决问题。除非有一种方法可以用某种动态sql创建视图,所以我不需要更新它...? :) – Chris 2012-02-24 12:03:01
我已经更新了我的答案。奇怪的是我想把'TRUNCATE TABLE'而不是'DELETE * FROM',但StackOverflow不会让我! – 2012-02-24 12:41:38
sp_MSForEachTable的新部分看起来很有前途,我希望我可以给你另外一个+1。;-) – Chris 2012-02-24 13:46:03