Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 修复SQL中的错误字符?_Sql Server_Sql Server 2008_Data Migration - Fatal编程技术网

Sql server 修复SQL中的错误字符?

Sql server 修复SQL中的错误字符?,sql-server,sql-server-2008,data-migration,Sql Server,Sql Server 2008,Data Migration,我有一个从Oracle迁移到SQL Server的数据库。其中一个表包含如下数据: Name steve mark john matt 执行此查询时: select * from [TABLE] where Name = 'steve' 一无所获。如果我使用SSMS并通过将列置零然后重新键入数据来编辑列,那么查询就会工作。因此,由于迁移,该字符串中存在一些未显示的内容 是否有任何方法可以显示该列的更多“原始”数据,以便我可以尝试找出这些坏数据是什么 谢谢 更新: 我稍微改变了我的查询,发现了

我有一个从Oracle迁移到SQL Server的数据库。其中一个表包含如下数据:

Name
steve
mark
john
matt
执行此查询时:

select * from [TABLE] where Name = 'steve'
一无所获。如果我使用SSMS并通过将列置零然后重新键入数据来编辑列,那么查询就会工作。因此,由于迁移,该字符串中存在一些未显示的内容

是否有任何方法可以显示该列的更多“原始”数据,以便我可以尝试找出这些坏数据是什么

谢谢

更新:

我稍微改变了我的查询,发现了一些有趣的东西:

SELECT LEN(RTRIM(Name)) from [Table]
我得到的是长度超过5,4,4,4。。。因此,名称后面肯定有一些字符,但它们不是空格

不幸的是,我有一些价值观,比如:

steve
steve1
steve12
所以我不能去

where NAME like 'steve%' 
因为它会错误地抓住所有三行

更新(解决方案):


是的,这是一些字符(13)+10的。。我使用SSMS中的GenerateScripts任务生成了一些插入,并显示了一些换行符。我刚刚用REPLACE做了一个更新,一切都很好。谢谢大家

我认为问题不在于名字后面的空格。我认为SQL Server无论如何都不会存储这些内容。前导空间呢


是的,您可以通过编写表中数据的脚本来获取原始数据。在SSMS中,您可以在对象资源管理器中右键单击数据库名称,选择任务,然后生成脚本。。。这将允许您生成模式脚本和数据脚本。然后,您可以查看是否有前导空格或尾随空格。

您还可以创建一个UDF来省略非alphanum字符。例如:

Create Function dbo.ReplaceNonAlphaNum(@val varchar(255)) Returns Varchar(255)
BEGIN
   DECLARE @index int

   Set @index = patindex('%[^a-z0-9_]%',@val)
   While @index > 0 
   Begin
      Set @val = stuff(@val,@index,1,'')
      Set @index = patindex('%[^a-z0-9_]%',@val)
   End

   Return @val
END
GO

Grant Exec on dbo.ReplaceNonAlphaNum to Public
GO

-- Test
SELECT dbo.ReplaceNonAlphaNum('_abc@#!123^')
--should give a result of: 'abc123'

你确定这不仅仅是名字后面的空白问题吗?我相信空白问题不是问题。如果我将查询更改为“select*from[TABLE],其中RTRIM(name)=“steve”,它仍然不起作用,这很有帮助。。脚本中显示了一个换行符。。。现在,t-sql中换行符的编码值是多少。。。谷歌,别让我失望@MBonig它可能是一个字符(10)或字符(13)。。。如果您想快速找到答案,请尝试从[TABLE]中选择ASCII(子字符串(名称6,1)),其中名称为'steve%':)在该上下文中,ASCII将获取字符的ASCII值,CHAR将基于ASCII值创建字符。是的,这是一些字符(13)+10。。我使用SSMS中的GenerateScripts任务生成了一些插入,并显示了一些换行符。我刚刚用REPLACE做了一个更新,一切都很好。谢谢大家!