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
Sql 传递给LEFT或SUBSTRING函数的长度参数无效_Sql_Sql Server 2008_Substring - Fatal编程技术网

Sql 传递给LEFT或SUBSTRING函数的长度参数无效

Sql 传递给LEFT或SUBSTRING函数的长度参数无效,sql,sql-server-2008,substring,Sql,Sql Server 2008,Substring,以下是我的查询,当我使用类似拖车的“MAKE”MODEL'testing~testing,test~testq',以逗号结尾,但无法处理与其他可变拖车IDV相同的'testing~testing,test~testq'时,它可以正常工作。我尽了最大的努力,但无法解决问题。任何帮助都将不胜感激。 我的目标是获取xml的逗号分隔值 DECLARE @TRAILER_MAKE_MODEL VARCHAR(MAX) DECLARE @TRAILER_IDV VARCHAR(MAX) DECLARE @U

以下是我的查询,当我使用类似拖车的“MAKE”MODEL'testing~testing,test~testq',以逗号结尾,但无法处理与其他可变拖车IDV相同的'testing~testing,test~testq'时,它可以正常工作。我尽了最大的努力,但无法解决问题。任何帮助都将不胜感激。
我的目标是获取xml的逗号分隔值

DECLARE @TRAILER_MAKE_MODEL VARCHAR(MAX)
DECLARE @TRAILER_IDV VARCHAR(MAX)
DECLARE @USER_TYPE VARCHAR(MAX)

DECLARE @START_INDEX_1 INT
DECLARE @START_INDEX_4 INT

DECLARE @END_INDEX_1 INT
DECLARE @END_INDEX_4 INT

DECLARE @VALUE VARCHAR(50)

DECLARE @QUERY VARCHAR(MAX)
set @TRAILER_MAKE_MODEL='testing ~ testing, test ~ testq,' 
set @TRAILER_IDV='3500, 3400,'
set @USER_TYPE='MOBILE'

 set @QUERY = ''

set @START_INDEX_1 = 1
set @START_INDEX_4 = 1
set @END_INDEX_1 = 0
if ISNULL(@TRAILER_MAKE_MODEL,'') <> ''
begin
 WHILE @START_INDEX_1 > 0 and @START_INDEX_1 < len(@TRAILER_MAKE_MODEL)
BEGIN
SET @END_INDEX_1 = CHARINDEX(',',@TRAILER_MAKE_MODEL,@START_INDEX_1)
if @END_INDEX_1 = 0 and @START_INDEX_1 = 1
Begin
    SET @END_INDEX_1 = len(@TRAILER_MAKE_MODEL)
END 
if @USER_TYPE <> 'MOBILE'
Begin 
    SET @END_INDEX_1 = @END_INDEX_1 +1
End
SET @VALUE = SUBSTRING(@TRAILER_MAKE_MODEL,@START_INDEX_1,@END_INDEX_1 - @START_INDEX_1)
SET @QUERY = @QUERY + 'UNION ALL SELECT ''' + @VALUE + ''' TRAILER_MAKE_MODEL'


SET @END_INDEX_4 = CHARINDEX(',',@TRAILER_IDV,@START_INDEX_4)
if @END_INDEX_4 = 0 and @START_INDEX_4 = 1
Begin
    SET @END_INDEX_4 = len(@TRAILER_IDV)
END
if @USER_TYPE <> 'MOBILE'
Begin 
    SET @END_INDEX_4 = @END_INDEX_4 +1
End
SET @VALUE = SUBSTRING(@TRAILER_IDV,@START_INDEX_4,@END_INDEX_4 - @START_INDEX_4)
SET @QUERY = @QUERY + ',' + @VALUE + 'TRAILER_IDV '
print @QUERY
SET @START_INDEX_1 = @END_INDEX_1 + 1   
SET @START_INDEX_4 = @END_INDEX_4 + 1

END
select @QUERY=substring(@QUERY, 10, LEN(@QUERY) - 9)
EXEC (@QUERY) 
END  
DECLARE@TRAILER\u MAKE\u MODEL VARCHAR(最大值)
声明@TRAILER\u IDV VARCHAR(最大值)
声明@USER\u类型VARCHAR(最大值)
声明@START\u INDEX\u 1 INT
声明@START\u INDEX\u 4 INT
声明@END_INDEX_1 INT
声明@END_INDEX_4 INT
声明@VALUE VARCHAR(50)
声明@QUERY VARCHAR(最大值)
设置@TRAILER\u MAKE\u MODEL='testing~测试,test~testq,'
在拖车上设置IDV='3500,3400,'
设置@USER\u TYPE='MOBILE'
设置@QUERY=''
设置@START_索引_1=1
设置@START_索引_4=1
设置@END_索引_1=0
如果为空(@TRAILER\u MAKE\u MODEL.)“”
开始
而@START\u INDEX\u 1>0和@START\u INDEX\u 1
这里已经有很多代码了,因此在每个字符串末尾添加两行逗号可能不会降低速度,也不会降低代码的可维护性

SET @TRAILER_MAKE_MODEL += ',';
SET @TRAILER_IDV += ',';
我不太明白你的代码是做什么的,但是为了得到你得到的结果,你可以使用一个

select T1.Item as TRAILER_MAKE_MODEL,
       T2.Item as TRAILER_IDV
from dbo.SplitString(@TRAILER_MAKE_MODEL, ',') as T1
  inner join dbo.SplitString(@TRAILER_IDV, ',') as T2
    on T1.ItemNumber = T2.ItemNumber

谢谢你的帮助。我是一个初学者,我不能保证变量中有多少个“,”分隔的值,所以我必须将它们全部拆分。@Gops逗号的数量没有问题,除非你有很多逗号。那么分割字符串可能需要一些时间。