Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 server 如何将多个以连字符分隔的参数作为列表发送到存储过程<;字符串>;?_Sql Server_C# 4.0_Stored Procedures - Fatal编程技术网

Sql server 如何将多个以连字符分隔的参数作为列表发送到存储过程<;字符串>;?

Sql server 如何将多个以连字符分隔的参数作为列表发送到存储过程<;字符串>;?,sql-server,c#-4.0,stored-procedures,Sql Server,C# 4.0,Stored Procedures,我从一个文本框(例如“一二三四”)收到多个连字符的值,首先我要存储所有连字符的值,然后将列表作为参数发送到存储过程。如果要将其作为单个参数发送: 使用下面的函数拆分数据库中的字符串 CREATE FUNCTION SplitString ( @Input NVARCHAR(MAX), @Character CHAR(1) ) RETURNS @Output TABLE ( Item NVARCHAR(1000) ) AS BEGIN DECLARE @StartIndex

我从一个文本框(例如“一二三四”)收到多个连字符的值,首先我要存储所有连字符的值,然后将列表作为参数发送到存储过程。

如果要将其作为单个参数发送:

使用下面的函数拆分数据库中的字符串

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
编辑:


如果要将其作为表值参数发送:

在C#中:

将其传递给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); 

如果要将其作为单个参数发送:

使用下面的函数拆分数据库中的字符串

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
编辑:


如果要将其作为表值参数发送:

在C#中:

将其传递给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); 

如果要将其作为单个参数发送:

使用下面的函数拆分数据库中的字符串

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
编辑:


如果要将其作为表值参数发送:

在C#中:

将其传递给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); 

如果要将其作为单个参数发送:

使用下面的函数拆分数据库中的字符串

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
编辑:


如果要将其作为表值参数发送:

在C#中:

将其传递给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); 

将分隔的值集作为单个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

希望这有助于将分隔的值集作为单个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

希望这有助于将分隔的值集作为单个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

希望这有助于将分隔的值集作为单个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

希望这对您有所帮助

您想将其作为单个参数发送还是在多个参数中分离?参数的数量在文本框中是固定的?希望将其作为表值参数发送,然后在过程中单独使用。切勿使用SRT发送变长数组。始终为此使用表值参数。如果它对您有帮助,我会建议您对此进行投票。您想将其作为单个参数发送还是在多个参数中分离?参数的数量在文本框中是固定的?希望将其作为表值参数发送,然后在过程中单独使用。决不要使用srting发送可变长度数组。始终为此使用表值参数。如果它对您有帮助,我会建议您对此进行投票。您想将其作为单个参数发送还是在多个参数中分离?参数的数量在文本框中是固定的?希望将其作为表值参数发送,然后在过程中单独使用。决不要使用srting发送可变长度数组。始终为此使用表值参数。如果它对您有帮助,我会建议您对此进行投票。您想将其作为单个参数发送还是在多个参数中分离?参数的数量在文本框中是固定的?希望将其作为表值参数发送,然后在过程中单独使用。决不要使用srting发送可变长度数组。始终为此使用表值参数。如果这对你有帮助的话,我会建议你投赞成票。