Sql 如何在不重新键入字段名的情况下比较字段的修剪长度和未修剪长度?
基本上,我想检查varchar字段中文本右侧是否有空格。为此,我想将Sql 如何在不重新键入字段名的情况下比较字段的修剪长度和未修剪长度?,sql,database,sql-server-2005,Sql,Database,Sql Server 2005,基本上,我想检查varchar字段中文本右侧是否有空格。为此,我想将DATALENGTH(fieldName)与DATALENGTH(RTRIM(fieldName))进行比较 这并不难 唯一的问题是,我需要对五个表中的所有varchar字段执行此操作。我需要用这种方法比较大约250个字段。有没有一种方法可以将所有字段名放入一个查询中,而不必键入每个字段的名称2x 我使用这个查询来获取需要查看的字段的名称 SELECT name FROM sys.columns WHERE object_id
DATALENGTH(fieldName)
与DATALENGTH(RTRIM(fieldName))
进行比较
这并不难
唯一的问题是,我需要对五个表中的所有varchar字段执行此操作。我需要用这种方法比较大约250个字段。有没有一种方法可以将所有字段名放入一个查询中,而不必键入每个字段的名称2x
我使用这个查询来获取需要查看的字段的名称
SELECT name FROM sys.columns WHERE object_id =
(SELECT object_id FROM sys.tables WHERE name='tableName')
AND system_type_id = 167
(使用SQL Server 2005)
谢谢 如果SQL Server只是键入代码,我会让它为我生成代码,这就是问题所在:
SELECT
'SELECT * FROM ' + o.name + ' WHERE DATALENGTH(' + c.name + ') > DATALENGTH(RTRIM(' + c.name + '))'
FROM
sys.objects o
INNER JOIN sys.columns c ON
c.object_id = o.object_id AND
c.system_type_id = 167
WHERE
o.name = 'tableName'
您确定只需要检查167类型吗?我不确定如何在SQL中实现这一点,尽管我怀疑您需要生成一个SQL字符串,然后执行。我总是用记事本++来做这类事情
从字面上讲,如果您想避免两次键入字段名,请让SQL Server为您键入字段名
Select ' Or DataLength(' + Name + ')<>DataLength(RTrim(' + Name + '))'
From sys.Columns
Where Object_ID=Object_ID('Employees')
And System_Type_ID=167
现在您可以检查尾随空格中的任何值:Dbo.EndsWithSpaces(value)=1
当然,您仍然可以让SQL Server为您生成Where子句的结尾:
Select ' Or Dbo.EndsWithSpaces(' + Name + ')=1'
From sys.Columns
Where Object_ID=Object_ID('Employees')
And System_Type_ID=167
另一种方法是反转字符串并检查第一个空格。如果是1,则在数据末尾有一个空格。如果为0,则没有空格。如果大于1,则有一个空格,但它不在数据的末尾 例:
如果使用“%”之类的
where列,则只需键入一次名称即可(是的-我只需要varchar字段。我只是想NVARCHAR可能也很重要,但可能您不使用这些字段,或者它们不相关。
Select ' Or Dbo.EndsWithSpaces(' + Name + ')=1'
From sys.Columns
Where Object_ID=Object_ID('Employees')
And System_Type_ID=167
Select Columns...
From Table
Where CharIndex(' ', Reverse(ColumnName)) = 1