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