当前位置:  开发笔记 > 数据库 > 正文

在T-SQL中进行评估

如何解决《在T-SQL中进行评估》经验,为你挑选了3个好方法。

我有一个存储过程,允许IN参数指定要使用的数据库.然后,我在该数据库中使用预先确定的表进行查询.我遇到的问题是在查询中将表名与该数据库名连接起来.如果T-SQL有一个评估函数,我可以做类似的事情

eval(@dbname + 'MyTable')

目前我卡住创建一个字符串,然后使用exec()该字符串作为查询运行.这很麻烦,我宁愿不必创建一个字符串.有没有办法可以评估变量或字符串,所以我可以做以下的事情?

SELECT *
FROM eval(@dbname + 'MyTable')

我希望它评估,所以它最终出现如下:

SELECT *
FROM myserver.mydatabase.dbo.MyTable

Alan Feather.. 16

阅读本文... 动态SQL的诅咒和祝福,帮助我理解如何解决这类问题.



1> Alan Feather..:

阅读本文... 动态SQL的诅咒和祝福,帮助我理解如何解决这类问题.



2> harpo..:

没有"整洁"的方式来做到这一点.如果您接受它并查看其他内容,您将节省时间.

编辑: 啊哈!关于OP的评论"我们必须每月将数据加载到新数据库中,否则它会变得太大." 回想起来,令人惊讶的是没有人评论这个问题的微弱气味.

SQL Server提供了处理"太大"(特别是分区)的表的本机机制,这将允许您将表作为单个实体进行处理,同时将表分成背景中的单独文件,从而消除当前问题一共.

换句话说,这是数据库管理员而不是数据库使用者的问题.如果那也是你,我建议你考虑分区这个表.



3> Scott Fergus..:

尝试sp_executesql内置函数.您基本上可以在proc中构建SQL字符串,然后调用

exec sp_executesql @SQLString.

DECLARE @SQLString nvarchar(max)
SELECT @SQLString = '
SELECT *
FROM  ' +  @TableName 

EXEC sp_executesql @SQLString

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有