将文本转换为db对象和字段标识符

时间:2011-06-30 18:17:30

标签: sql-server tsql sql-server-2008 analysis

给定一个列出我所有表和列的select语句,如何将表名和列名转换为可以在单独的select语句中使用的标识符?

换句话说,如果我有字符串@Table ='Person'和@Column ='Name',我想要这样的东西:

select 
    DATALENGTH(MAX(t.@Column)) as Longest, 
    DATALENGTH(MIN(t.@Column)) as Shortest 
from @Table as t;

当然,这并没有达到我的目的。我想知道存储在列中的最长和最短字符串的长度。如果我想要单个列的此信息,则不需要使用这些字符串化变量。但我希望为我的数据库中的每个(varchar)列执行此操作。生命太短,无法创建每个SQL语句来实现此目的。这就是我想要一个用于指定表和列的参数机制的原因。如何解决这个问题以实现目标?

当然,我可能会把这一切都搞错了。也许我应该通过索引来解决每一列,并且仅在需要输出时才转换为列名。想法?

2 个答案:

答案 0 :(得分:1)

DECLARE @sql VARCHAR(999)
DECLARE @col VARCHAR(50)
DECLARE @table VARCHAR(50)

SET @col = <colname>
SET @table = <tablename>

SET @SQL = '
select 
DATALENGTH(MAX(t.@Column)) as Longest, 
DATALENGTH(MIN(t.@Column)) as Shortest 
from @Table as t'

SET @SQL = REPLACE(REPLACE(@SQL, '@Column', @col), '@Table', @table)

EXEC(@SQL)

答案 1 :(得分:1)

如果你是tsql的新手,特别是动态的sql,那么你应该考虑的事情很好。大多数人,当他们发现动态SQL时会想到各种用途以及他们可以用它做的事情。但就像我说的那样......小心。

http://www.sommarskog.se/dynamic_sql.html