给定一个列出所有表和列的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语句来实现这一点。这就是为什么我想要一个参数化机制来指定表和列。如何解决此问题以实现目标?
当然,我可能完全错了。也许我应该按索引对每一列进行寻址,并且只有在需要输出时才转换为列名。想法?
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)
如果您是tsql,特别是动态sql的新手,这是一本关于您应该考虑的事情的好读物。大多数人,当他们发现动态sql时,会想到它的各种用途和可以做的事情。但就像我说的。。。小心。
http://www.sommarskog.se/dynamic_sql.html