use*_*604 3 sql-server sql-server-2008-r2
有没有人可以通过简单的查询从单个 SQL Server 2008 R2 数据库中所有表的所有字母数字(文本、nchar、varchar 等)类型的列中查找数据行中最长的字符串?
以下代码应返回具有当前数据库中最大文本段的单个列,以及架构、表和列名称以及文本段的大小:
DECLARE @cmd NVARCHAR(max);
DECLARE @sep NVARCHAR(max);
SET @cmd = '';
SET @sep = '';
SELECT @cmd = @cmd + @sep +
'SELECT ''' + QUOTENAME(sc.name) + '.' + QUOTENAME(t.name) +
'.' + QUOTENAME(c.name) + ''' AS ColumnName, ' +
QUOTENAME(c.name) + ' AS ColumnValue, LEN(CAST(' +
QUOTENAME(c.name) + ' AS NVARCHAR(max))) AS ColumnLength ' +
' FROM ' + QUOTENAME(sc.name) + '.' + QUOTENAME(t.name)
, @sep = ' UNION ALL '
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id = c.object_id
INNER JOIN sys.types ty on c.system_type_id = ty.system_type_id
INNER JOIN sys.schemas sc ON t.schema_id = sc.schema_id
WHERE t.is_ms_shipped = 0
AND ty.name IN (
'ntext'
, 'text'
, 'varchar'
, 'nvarchar'
, 'nchar'
, 'char'
, 'sysname'
, 'sql_variant'
);
SET @cmd = 'SELECT TOP(1) * FROM (' + @cmd + ') t ORDER BY 3 DESC'
SELECT @cmd; /* This displays the resulting SQL Text that will be
EXEC'd by the following statement */
EXEC sp_executesql @cmd;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1521 次 |
最近记录: |