变量声明,用于存储多个值,如完整列值

时间:2017-02-15 07:08:41

标签: sql sql-server

我有一个要求,我必须将列值存储到声明的变量中,无论如何都是可能的。我知道变量只能存储单个值而不能存储多个值。但就我而言,我非常需要它。

我在这里设置列是否必须将INT中的日期值转换为日期列并将其保存在该变量中以进行比较。

我有一些列的值如下

"A(B_CD_EE_FF_DFE)_ERT"

所以我必须删除这两个括号和过程。

Set @Variable= (SELECT  replace (replace ( replace (SUBSTRING(TXMLFileName, CHARINDEX('(', TXMLFileName)
, CHARINDEX(')',TXMLFileName) - CHARINDEX(')', reverse (TXMLFileName)) ) , ')', '') ,'(' ,'') ,'.xml' , '') 

from 
tblXML )

给我错误,下面给出答案,因为我只选择前1名。

Set @Variable= (SELECT top 1  replace (replace ( replace (SUBSTRING(TXMLFileName, CHARINDEX('(', TXMLFileName)
, CHARINDEX(')',TXMLFileName) - CHARINDEX(')', reverse (TXMLFileName)) ) , ')', '') ,'(' ,'') ,'.xml' , '') 

from 
tblXML )

所以有任何已知的解决方案...... ?????提前致谢

2 个答案:

答案 0 :(得分:1)

变量不需要只存储单个值。你可以创建例如自定义表格类型

CREATE TYPE MyCustomType AS TABLE (
    MyCustomTypeId INT,
    MyCustomValueColumn VARCHAR(100)
)

或者只是在需要的地方声明一个可比较的表变量。

答案 1 :(得分:0)

declare @tblXML table (TXMLFileName varchar(50))
insert into @tblXML values
('A(B_CD_EE_FF_DFE)_ERT'),
('(EE_FF_DFE)_ERT'),
('A(B_CD_EE)')

declare @tmp varchar(max)
SET @tmp = ''
SELECT @tmp=@tmp+ replace (replace ( replace (SUBSTRING(TXMLFileName, CHARINDEX('(', TXMLFileName)
, CHARINDEX(')',TXMLFileName) -1 ) , ')', '') ,'(' ,'') ,'.xml' , '')+''' '''
from 
@tblXML 

select ''''+@tmp

或者你不想单行使用这个

SELECT ''''+ replace (replace ( replace (SUBSTRING(TXMLFileName, CHARINDEX('(', TXMLFileName)
, CHARINDEX(')',TXMLFileName) -1 ) , ')', '') ,'(' ,'') ,'.xml' , '')+''''
from 
@tblXML 
相关问题