Sql 如何修剪存储过程中字符串的空白?
我有两张桌子: 目标表:Sql 如何修剪存储过程中字符串的空白?,sql,sql-server,trim,Sql,Sql Server,Trim,我有两张桌子: 目标表:专业化(id、名称、描述) 源表临时专业化(id、名称、描述) 我想将TempSpe.description复制到specialization.description,如果名称与specialization中的所有列匹配,或者在specialization中插入新记录。 由于specialization.name末尾的空白,我得到了重复的条目 我的程序是: USE [TempDatabase] GO /****** Object: StoredProcedure [db
专业化(id、名称、描述)
源表临时专业化(id、名称、描述)
我想将TempSpe.description
复制到specialization.description
,如果名称与specialization
中的所有列匹配,或者在specialization
中插入新记录。
由于specialization.name
末尾的空白,我得到了重复的条目
我的程序是:
USE [TempDatabase]
GO
/****** Object: StoredProcedure [dbo].[TempDatabase2] Script Date: 23/12/2015 3:46:49 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TempDatabase2]
WITH EXECUTE AS owner
as
BEGIN
MERGE Specialisation as T
USING TempSpecialisation as S
ON s.Name = T.Name
WHEN NOT MATCHED BY Target
THEN INSERT(id ,Name, Description1) VALUES(S.id ,S.Name, S.Description1)
WHEN MATCHED and t.name =s.name
THEN UPDATE SET T.Description1 = S.Description1
OUTPUT $action, inserted.*;
End
表专业化
id Name Descriptions
545454 "Allergist " null
表2专业化
id Name Descriptions
1 "Allergist" This is a doctor who helps with allergies.
我需要更新TempSpecialization的专业描述。
但它的输出类似于
id Name Descriptions
1 "Allergist" This is a doctor who helps with allergies.
545454 "Allergist " null
使用LTRIM(RTRIM(s.Name))
删除字段开头和结尾的空白,使merge语句变为:
MERGE Specialisation as T
USING TempSpecialisation as S
ON LTRIM(RTRIM(s.Name)) = LTRIM(RTRIM(T.Name))
WHEN NOT MATCHED BY Target
THEN INSERT(id ,Name, Description1) VALUES(S.id ,S.Name, S.Description1)
WHEN MATCHED
THEN UPDATE SET T.Description1 = S.Description1
OUTPUT $action, inserted.*;
End
使用LTRIM(RTRIM(s.Name))
删除字段开头和结尾的空白,使合并语句变为:
MERGE Specialisation as T
USING TempSpecialisation as S
ON LTRIM(RTRIM(s.Name)) = LTRIM(RTRIM(T.Name))
WHEN NOT MATCHED BY Target
THEN INSERT(id ,Name, Description1) VALUES(S.id ,S.Name, S.Description1)
WHEN MATCHED
THEN UPDATE SET T.Description1 = S.Description1
OUTPUT $action, inserted.*;
End
我用过
ON CHARINDEX(s.name,t.name) = 1
现在可以工作了!!
谢谢你我用过
ON CHARINDEX(s.name,t.name) = 1
现在可以工作了!!
感谢您使用[TempDatabase]GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE[dbo]。[TempDatabase2]将EXECUTE AS owner作为开始合并专业化作为T使用TempSpecialization作为S ON(LTRIM(RTRIM(S.Name))=(LTRIM(RTRIM(T.Name)))当与目标不匹配时,插入(id,Name,Description1)值(S.id,S.Name,S.Description1)匹配后,t.Name=S.Name,然后更新集t.Description1=S.Description1输出$action,inserted.*;End仍然未工作!!重复输入:(有空白字符未被TRIM函数删除。请尝试组合RIGHT和ASCII函数,以查看您正在处理的内容。使用[TempDatabase]GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE[dbo]。[TempDatabase2]以EXECUTE AS owner作为开始合并专业化作为T使用temperialization作为S ON(LTRIM(RTRIM(S.Name))=(LTRIM(RTRIM(T.Name))),当与目标不匹配时,插入(id,Name,Description1)值(S.id,S.Name,S.Description1)如果匹配且t.name=s.name,则更新集t.Description1=s.Description1输出$action,已插入。*;结束仍不工作!!重复条目:(有一些空白字符未被TRIM函数删除。请尝试将RIGHT函数和ASCII函数组合起来以查看您正在处理的内容。
id
column-identity?如果此行执行了正确的更新操作,则更新集T.Description1=S.Description1,我认为应该更新集S.Description1=T.Description1id
column-identity?如果此行执行了正确的更新操作,则更新集T.Description1=S.Description1,我认为应该更新集S.Description1=T.Description1,直到返回重复条目。名称类似于“Allergist”两个空格。但我不认为这有什么关系。请提供一个用于测试目的的小数据集,直到它返回重复条目。名称类似于“Allergist”两个空格。但我不认为这有什么关系。请提供一个用于测试目的的小数据集