C# 插入…从拆分功能中选择)。转换为XML比CLR慢,基于属性的XML无论如何要快得多。这是一个简单的列表,但是传入XML或TVP也可以处理复杂的数组。不确定避免一个简单的、一次性的CREATE类型会得到什么。。。作为表。一般来说,最好不要连接到表变量,而是连

C# 插入…从拆分功能中选择)。转换为XML比CLR慢,基于属性的XML无论如何要快得多。这是一个简单的列表,但是传入XML或TVP也可以处理复杂的数组。不确定避免一个简单的、一次性的CREATE类型会得到什么。。。作为表。一般来说,最好不要连接到表变量,而是连,c#,sql-server,tsql,stored-procedures,C#,Sql Server,Tsql,Stored Procedures,插入…从拆分功能中选择)。转换为XML比CLR慢,基于属性的XML无论如何要快得多。这是一个简单的列表,但是传入XML或TVP也可以处理复杂的数组。不确定避免一个简单的、一次性的CREATE类型会得到什么。。。作为表。一般来说,最好不要连接到表变量,而是连接到临时表。默认情况下,表变量似乎只有一行,尽管有一两个技巧(请参阅@AaronBertrand优秀而详细的文章:)。很好!我真的很喜欢这种方法,我过滤的int键+1@MDV2000谢谢:)在字符串键上,这也有很好的性能,因为没有将int列强制


插入…从拆分功能中选择)。转换为XML比CLR慢,基于属性的XML无论如何要快得多。这是一个简单的列表,但是传入XML或TVP也可以处理复杂的数组。不确定避免一个简单的、一次性的
CREATE类型会得到什么。。。作为表
。一般来说,最好不要连接到表变量,而是连接到临时表。默认情况下,表变量似乎只有一行,尽管有一两个技巧(请参阅@AaronBertrand优秀而详细的文章:)。很好!我真的很喜欢这种方法,我过滤的int键+1@MDV2000谢谢:)在字符串键上,这也有很好的性能,因为没有将int列强制转换为varchar…我玩游戏迟到了,但这非常聪明!对我的问题很有效。这太棒了!我一定会用这个,谢谢。这不是一个好的解决方案,因为像%%一样,会对表格进行扫描。我使用了这个逗号分隔的解析功能,它适用于小数据集,如果你检查它的执行计划,它会对大数据集产生问题,并且你必须在存储过程中列出多个csv列表
// Assumes connection is an open SqlConnection object.
using (connection)
{
// Create a DataTable with the modified rows.
DataTable addedCategories =
  CategoriesDataTable.GetChanges(DataRowState.Added);

// Configure the SqlCommand and SqlParameter.
SqlCommand insertCommand = new SqlCommand(
    "usp_InsertCategories", connection);
insertCommand.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = insertCommand.Parameters.AddWithValue(
    "@tvpNewCategories", addedCategories);
tvpParam.SqlDbType = SqlDbType.Structured;

// Execute the command.
insertCommand.ExecuteNonQuery();
}
CREATE PROCEDURE dbo.SOExample1
    (
    @excludeIngredientsString varchar(MAX) = ''
    )
AS
    /* Convert string to table of ints */
    DECLARE @excludeIngredients TABLE (ID int)
    insert into @excludeIngredients
    select ID = Item from dbo.SplitInts(@excludeIngredientsString)

    /* Select recipies that don't contain any ingredients in our excluded table */
   SELECT        r.Name, r.Slug
FROM            Recipes AS r LEFT OUTER JOIN
                         RecipeIngredients as ri inner join
                         @excludeIngredients as ei on ri.IngredientID = ei.ID
                         ON r.ID = ri.RecipeID
WHERE        (ri.RecipeID IS NULL)
Create Procedure Proc1 


@UserId int, //just an Id param
@s nvarchar(max)  //this is the array your going to pass from C# code to your Sproc

AS

    declare @xml xml

    set @xml = N'<root><r>' + replace(@s,',','</r><r>') + '</r></root>'

    Insert into UserRole (UserID,RoleID)
    select 
       @UserId [UserId], t.value('.','varchar(max)') as [RoleId]


    from @xml.nodes('//root/r') as a(t)
END 
CREATE PROCEDURE dbo.DoSomethingOnSomeEmployees  @List AS varchar(max)
AS
BEGIN
  SELECT EmployeeID 
  FROM EmployeesTable
  -- inner join AnotherTable on ...
  where @List like '%;'+cast(employeeID as varchar(20))+';%'
END
GO
CREATE FUNCTION dbo.SplitInts
(
   @List      VARCHAR(MAX),
   @Delimiter VARCHAR(255)
)
RETURNS TABLE
AS
  RETURN ( SELECT Item = CONVERT(INT, Item) FROM
      ( SELECT Item = x.i.value('(./text())[1]', 'varchar(max)')
        FROM ( SELECT [XML] = CONVERT(XML, '<i>'
        + REPLACE(@List, @Delimiter, '</i><i>') + '</i>').query('.')
          ) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
      WHERE Item IS NOT NULL
  );
GO
 CREATE PROCEDURE dbo.sp_DeleteMultipleId
 @List VARCHAR(MAX)
 AS
 BEGIN
      SET NOCOUNT ON;
      DELETE FROM TableName WHERE Id IN( SELECT Id = Item FROM dbo.SplitInts(@List, ',')); 
 END
 GO
int[] intarray = { 1, 2, 3, 4, 5 };  
string[] result = intarray.Select(x=>x.ToString()).ToArray();
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "sp_DeleteMultipleId";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Id",SqlDbType.VARCHAR).Value=result ;
value ----- 123 456 789 246 22 33 44 55 66
CREATE TYPE dumyTable
AS TABLE
(
  RateCodeId int,
  RateLowerRange int,
  RateHigherRange int,
  RateRangeValue int
);
GO
CREATE PROCEDURE spInsertRateRanges
  @dt AS dumyTable READONLY
AS
BEGIN
  SET NOCOUNT ON;

  INSERT  tblRateCodeRange(RateCodeId,RateLowerRange,RateHigherRange,RateRangeValue) 
  SELECT * 
  FROM @dt 
END