Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何修剪存储过程中字符串的空白?_Sql_Sql Server_Trim - Fatal编程技术网

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.Description1
id
column-identity?如果此行执行了正确的更新操作,则更新集T.Description1=S.Description1,我认为应该更新集S.Description1=T.Description1,直到返回重复条目。名称类似于“Allergist”两个空格。但我不认为这有什么关系。请提供一个用于测试目的的小数据集,直到它返回重复条目。名称类似于“Allergist”两个空格。但我不认为这有什么关系。请提供一个用于测试目的的小数据集