2008-10-08 4 views

ответ

0

Согласно статье This, вы можете попробовать параметр значения таблицы.

+0

Это, скорее всего, SQL Server 2008. – 2008-10-08 14:33:36

0

Да, вы можете использовать кусок XML для создания своего списка идентификаторов. Затем вы можете использовать OPENXML и выбрать из этого набора записей.

Посмотрите OPENXML, sp_preparexmldocument, sp_removexmldocument

2

Это может быть грязный хак, но вы можете создать временную таблицу, а затем присоединиться к нему из вашей хранимой процедуры (при условии, что они будут доступны в течение одного соединения). Например:

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 
2

Вы можете попробовать то, что я сделал делать с: -

Создайте функцию под названием 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),>) 
+0

Я использовал это много в SQL2005, я обнаружил, что функции CLR разделяют строку быстрее, но поскольку они были непрозрачной общей производительностью, вызванной плохими запросами. – Meff 2008-10-08 14:41:42

Смежные вопросы