我试图匹配相同的值,但例如使用不同的大小写字母。
value1=TesT
value2=test
我有2列我想要同步我做了一个同步很好的程序,但没有同步具有不同大小写字母和相同值的值。
我不插入所有的内容每次我想运行需要很长时间的过程时,从column1到column2的值。
这是我的查询
DECLARE nam CURSOR FOR
select ipaname, ipaadr, vidname, vidadr, ipadogno as dogno from tmpNames
DECLARE @dogno varchar(5)
DECLARE @ipaname VARCHAR(200)
DECLARE @ipaadr VARCHAR(200)
DECLARE @vidname VARCHAR(200)
DECLARE @vidadr VARCHAR(200)
open nam
fetch next from nam into @ipaname, @ipaadr, @vidname, @vidadr, @dogno
while @@FETCH_STATUS = 0 BEGIN
DECLARE @sync varchar(200)
if @ipaname!=@vidname or @ipaadr!=@vidadr begin
set @sync = 'update client set name=''' +cast(@vidname as VARCHAR(max))+ ''', adr=''' +cast (@vidadr as varchar(max))+ ''' where dogno=''' + @dogno + ''''
Execute(@sync) at ipacct5
end
fetch next from nam into @ipaname, @ipaadr, @vidname, @vidadr, @dogno
END
close nam
deallocate nam
答案 0 :(得分:0)
Sql Server默认排序规则是Case insensitive
(我认为这就是你的问题)。如果您需要进行区分大小写搜索,请使用SQL_Latin1_General_CP1_CS_AS
归类。
您可以将当前的服务器排序规则检查为:
SELECT SERVERPROPERTY ('Collation')
如果显示"...CI.."
,则表示不区分大小写,否则应为"...CS.."
。
以下是有关如何在比较时使用归类的示例( Demo here ):
declare @s1 nvarchar(10) = 'Test',
@s2 nvarchar(10) = 'test'
--Here Test = test
if (@s1 = @s2) SELECT 'CASE INSENSITIVE';
declare @s1 nvarchar(10) = 'Test',
@s2 nvarchar(10) = 'test'
--In this case, Test <> test
if (@s1 != @s2 Collate SQL_Latin1_General_CP1_CS_AS) SELECT 'CASE SENSITIVE';
另外,我认为您可能不需要游标,请将其替换为以下更新查询。
--Check the SELECT query first and if okay comment SELECT and uncomment UPDATE
select c.name, t.vidname , c.adr, t.vidadr
--update c set c.name=t.vidname , c.adr=t.vidadr
from client c
join tmpNames t on c.dogno= t.ipadogno
where (t.ipaname != t.vidname Collate SQL_Latin1_General_CP1_CS_AS)
or (t.ipaadr != t.vidadr Collate SQL_Latin1_General_CP1_CS_AS)