给定一个列出我所有表和列的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语句来实现此目的。这就是我想要一个用于指定表和列的参数机制的原因。如何解决这个问题以实现目标?
当然,我可能会把这一切都搞错了。也许我应该通过索引来解决每一列,并且仅在需要输出时才转换为列名。想法?
答案 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时会想到各种用途以及他们可以用它做的事情。但就像我说的那样......小心。