Возможно ли отправить список идентификаторов в хранимую процедуру из C# без грязных хаков?Отправлять список идентификаторов в хранимую процедуру SQL Server из C#
UPDATE Germs
SET Mutated = ~Mutated
WHERE (GermID IN (ids))
Возможно ли отправить список идентификаторов в хранимую процедуру из C# без грязных хаков?Отправлять список идентификаторов в хранимую процедуру SQL Server из C#
UPDATE Germs
SET Mutated = ~Mutated
WHERE (GermID IN (ids))
Согласно статье This, вы можете попробовать параметр значения таблицы.
Да, вы можете использовать кусок XML для создания своего списка идентификаторов. Затем вы можете использовать OPENXML и выбрать из этого набора записей.
Посмотрите OPENXML, sp_preparexmldocument, sp_removexmldocument
Это может быть грязный хак, но вы можете создать временную таблицу, а затем присоединиться к нему из вашей хранимой процедуры (при условии, что они будут доступны в течение одного соединения). Например:
CREATE TABLE #ids (id int)
INSERT INTO #ids VALUES ('123') -- your C# code would generate all of the inserts
-- From within your stored procedure...
UPDATE g
SET Mutated = ~Mutated
FROM Germs g
JOIN #ids i ON g.GermID = i.id
Вы можете попробовать то, что я сделал делать с: -
Создайте функцию под названием Split_String
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE FUNCTION [dbo].[Split_String]
(
@MyString varchar(5000)
)
RETURNS @Results TABLE
(
Value varchar(1000)
)
AS
BEGIN
DECLARE @Pos int
DECLARE @StrLen int
DECLARE @MyLen int
DECLARE @MyVal varchar
SET @pos = 1
SET @MyLen = 1
WHILE @MyString <> ''
BEGIN
SET @MyLen = charindex(',',@MyString)
IF @MyLen = 0 SET @MyLen = Len(@MyString)
INSERT @Results SELECT replace(substring(@MyString, @pos, @MyLen),',','')
SET @MyString = SUBSTRING(@MyString,@MyLen+1,len(@MyString))
END
RETURN
END
Тогда при использовании IN() использовать в следующем виде с строка, разделенная запятыми: -
SELECT * FROM [youDataBase].[dbo].[Split_String] (<@MyString, varchar(5000),>)
Я использовал это много в SQL2005, я обнаружил, что функции CLR разделяют строку быстрее, но поскольку они были непрозрачной общей производительностью, вызванной плохими запросами. – Meff 2008-10-08 14:41:42
Это, скорее всего, SQL Server 2008. – 2008-10-08 14:33:36