我收到了多个从文本框中删除的值连字符,例如。 " one-two-three-four",首先我要存储所有连字符saparated值,然后将列表作为参数发送到存储过程。
答案 0 :(得分:2)
如果您想将其作为单一参数发送:
使用以下功能在DB
中拆分字符串CREATE FUNCTION SplitString
(
@Input NVARCHAR(MAX),
@Character CHAR(1)
)
RETURNS @Output TABLE (
Item NVARCHAR(1000)
)
AS
BEGIN
DECLARE @StartIndex INT, @EndIndex INT
SET @StartIndex = 1
IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
BEGIN
SET @Input = @Input + @Character
END
WHILE CHARINDEX(@Character, @Input) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Character, @Input)
INSERT INTO @Output(Item)
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
END
RETURN
END
GO
在SP
中使用它SELECT Item
FROM dbo.SplitString('one-two-three-four', '-')
编辑:
如果您想将其作为表值参数发送:
在C#中:
string [] list = Textbox.Text.Split('-');
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
foeach(string s in list)
{
dt.Rows.Add(s);
}
将其传递给SP:
SqlParameter parameter = new SqlParameter();
//The parameter for the SP must be of SqlDbType.Structured
parameter.ParameterName="@Sample";
parameter.SqlDbType = System.Data.SqlDbType.Structured;
parameter.Value = dt;
command.Parameters.Add(parameter);
答案 1 :(得分:1)
将分隔的值集作为单个Varchar或Nvarchar参数发送到存储过程。然后,只需在代码块中或在表值函数中包装,就可以在存储过程中以编程方式将它们分开。我更喜欢函数方法,代码可重用性始终是更好的方法。请注意可能的SQL注入,因此请对您的参数进行适当的验证。
CREATE FUNCTION [dbo].[fn_DelimitSplitter]
(
@Delimiter varchar(8) = '',
@TextToSplit varchar(max)
)
RETURNS @Array TABLE
(
Value varchar(64)
)
AS
BEGIN
DECLARE @imed varchar(64)
SET @TextToSplit = @TextToSplit + @Delimiter
WHILE (PATINDEX('%'+@Delimiter+'%',@TextToSplit) > 0)
BEGIN
SET @imed = SUBSTRING(@TextToSplit,0,PATINDEX('%'+@Delimiter+'%',@TextToSplit)+1)
SET @TextToSplit = SUBSTRING(@TextToSplit,LEN(@imed)+1,LEN(@TextToSplit) + 1)
INSERT INTO @Array
SELECT LTRIM(RTRIM(REPLACE(@imed, @Delimiter,'')))
END
RETURN
END
希望这有帮助