我们有一个由两部分组成的数据库设置:静态结构和动态添加。对于每个数据库,动态可能不同,有时我们没有所有动态字段的数据。 Rigt现在,我们通过查看整个表中的记录总数来检查容器,但是如果可能的话,我们希望转移到更精确的检查容器的方法。是否有可能通过几百个字段快速查看哪些字段是空的,哪些字段是填充的?想要快速检查数据字段
0
A
回答
0
用于搜索在任一列NULLS你可以做到这一点任何行,首先要创建这个PROC是基于这里的代码Search all columns in all the tables in a database for a specific value
CREATE PROCEDURE FindMyData_StringNull
@DataToFind NVARCHAR(4000),
@ExactMatch BIT = 0
AS
SET NOCOUNT ON
DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)
INSERT INTO @Temp(TableName,SchemaName, ColumnName, DataType)
SELECT C.Table_Name,C.TABLE_SCHEMA, C.Column_Name, C.Data_Type
FROM Information_Schema.Columns AS C
INNER Join Information_Schema.Tables AS T
ON C.Table_Name = T.Table_Name
AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
WHERE Table_Type = 'Base Table'
DECLARE @i INT
DECLARE @MAX INT
DECLARE @TableName sysname
DECLARE @ColumnName sysname
DECLARE @SchemaName sysname
DECLARE @SQL NVARCHAR(4000)
DECLARE @PARAMETERS NVARCHAR(4000)
DECLARE @DataExists BIT
DECLARE @SQLTemplate NVARCHAR(4000)
SELECT @SQLTemplate = 'If Exists(Select *
From ReplaceTableName
Where Convert(nVarChar(4000), [ReplaceColumnName])
IS NULL
)
Set @DataExists = 1
Else
Set @DataExists = 0'
,
@PARAMETERS = '@DataExists Bit OUTPUT',
@i = 1
SELECT @i = 1, @MAX = MAX(RowId)
FROM @Temp
WHILE @i <= @MAX
BEGIN
SELECT @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
FROM @Temp
WHERE RowId = @i
PRINT @SQL
EXEC SP_EXECUTESQL @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT
IF @DataExists =1
UPDATE @Temp SET DataFound = 1 WHERE RowId = @i
SET @i = @i + 1
END
SELECT SchemaName,TableName, ColumnName
FROM @Temp
WHERE DataFound = 1
这样称呼它
FindMyData_StringNull NULL,1
0
假设您只是检查列中是否存在非NULL值,使用EXISTS通常应比获取COUNT(*)快。 COUNT需要扫描整个表格以获得正确的数字。 EXISTS只需要在停止查找之前找到满足条件的一行。
如果整列为NULL,那么时间将大致相同,但在所有这些情况下,如果您有值,则可能会大大缩短。
0
从Search all columns in all the tables in a database for a specific value
先创建这个功能
CREATE PROCEDURE FindMyData_String
@DataToFind NVARCHAR(4000),
@ExactMatch BIT = 0
AS
SET NOCOUNT ON
DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)
INSERT INTO @Temp(TableName,SchemaName, ColumnName, DataType)
SELECT C.Table_Name,C.TABLE_SCHEMA, C.Column_Name, C.Data_Type
FROM Information_Schema.Columns AS C
INNER Join Information_Schema.Tables AS T
ON C.Table_Name = T.Table_Name
AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
WHERE Table_Type = 'Base Table'
And Data_Type In ('ntext','text','nvarchar','nchar','varchar','char')
DECLARE @i INT
DECLARE @MAX INT
DECLARE @TableName sysname
DECLARE @ColumnName sysname
DECLARE @SchemaName sysname
DECLARE @SQL NVARCHAR(4000)
DECLARE @PARAMETERS NVARCHAR(4000)
DECLARE @DataExists BIT
DECLARE @SQLTemplate NVARCHAR(4000)
SELECT @SQLTemplate = CASE WHEN @ExactMatch = 1
THEN 'If Exists(Select *
From ReplaceTableName
Where Convert(nVarChar(4000), [ReplaceColumnName])
= ''' + @DataToFind + '''
)
Set @DataExists = 1
Else
Set @DataExists = 0'
ELSE 'If Exists(Select *
From ReplaceTableName
Where Convert(nVarChar(4000), [ReplaceColumnName])
Like ''%' + @DataToFind + '%''
)
Set @DataExists = 1
Else
Set @DataExists = 0'
END,
@PARAMETERS = '@DataExists Bit OUTPUT',
@i = 1
SELECT @i = 1, @MAX = MAX(RowId)
FROM @Temp
WHILE @i <= @MAX
BEGIN
SELECT @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
FROM @Temp
WHERE RowId = @i
PRINT @SQL
EXEC SP_EXECUTESQL @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT
IF @DataExists =1
UPDATE @Temp SET DataFound = 1 WHERE RowId = @i
SET @i = @i + 1
END
SELECT SchemaName,TableName, ColumnName
FROM @Temp
WHERE DataFound = 1
现在,在任何字符串类型的列称呼它为空字符串行
exec FindMyData_String '',1
它会给你的输出列名,表名和模式名称 请记住,它将搜索所有表
+0
现在这是一种虽然循环发明的东西。 – HLGEM 2010-06-16 15:25:32
0
我认为最简单的解决方案是使用CHECKSUM功能。首先,您需要确定空行上的校验和,然后将其与其他行进行比较。
Select Checksum(*)
From Table
在这里使用*
的渔获是它将包括PK。您可能必须指定除PK之外的各个列以获得准确的读数。因此,像:
Select Checksum(Col1, Col2, Col3)
From Table
相关问题
- 1. Hive-快速检查数据的方法
- 2. 快速检查堆?
- 3. 用户需要快速切换想法
- 4. “放弃了” - 快速检查
- 5. 想要从数据库检索数据
- 6. 如何快速检查输入参数?
- 7. 需要快速计算数据
- 8. 快速字符检测
- 9. MySQL中的快速数据检索
- 10. 检查数字字段lotusscript
- 11. HTML数字字段检查
- 12. 用于快速查找和检索的数据容器
- 13. SAS 9.4如何快速检查所有的数据/变量
- 14. 快速检查或添加到数据库
- 15. 如何快速检查数据库连接?
- 16. 检查数据库日期字段PHP
- 17. 数值数据 - 高容量+高速度+快速检索
- 18. 常用数据库字段大小/类型快速参考?
- 19. 查找字符串快速
- 20. 快速关键字查找
- 21. 快速CSS字体查询
- 22. 如何快速查询大数据?
- 23. SQL 2005 - 快速复制数据库+数据的快速方法
- 24. 快速字符串检查寻找字符串复制
- 25. 无法从sql查询中检索想要的数据
- 26. 快速查询参数
- 27. 检查快速会话是否过期
- 28. Modernizr只是一个快速检查?
- 29. 检查2列脚本快速运行
- 30. mongodb python,快速管道代码检查
通过空的,你的意思是NULL值的所有行? – 2010-06-16 15:13:14
字段可以为空或者可以在其中有''(空字符串),尽管我现在想专注于空值,然后再看空值。 – 2010-06-16 15:17:44