내가 SQL 서버 여기에 2008SQL 서버 : 기능
를 사용하고 저장 프로 시저에 하나의 문자를 반환하는 기능 (분할 문자열과 반환 INT 값)이 방법을 사용하는 경우
USE [SANNET]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata int
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(CAST(SUBSTRING(@string, @start, @end - @start)AS int))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
GO
모든 괜찮이다
select * from fnSplitString('65,1,2,27,28,33,34',',')
/**
Returning
splitdata
-----------
65
1
2
27
28
33
34
(7 row(s) affected)
*/
그러나 내가 저장 프로 시저에서 사용하는 경우 하나의 문자 (심지어 행)
,691,363을 반환210-- Procedure which calling the function
CREATE /*ALTER*/ PROCEDURE [dbo].[CallerProcedure]
@values varchar
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select * from fnSplitString(@values,',');
END
GO
사용
DECLARE @result int
EXEC @result = [dbo].[CallerProcedure]
@values = '65,1,2,27,28,33,34'
SELECT @result
GO
/*
Returns
splitdata
-----------
6
-----------
0
(영향 1 행 (들)) */
는 짝수 값이 "64"이 반환되지시피
. 그냥 returnet 6.
어디에서 잘못하고 있습니까? 다음과 같이
감사
시작은,'OUTPUT' 변수를 사용. – user2989408