Передача массива идентификаторов в хранимую процедуру - PullRequest
0 голосов
/ 16 июля 2009

У меня есть хранимая процедура, я хочу отправить ей массив значений. Когда я отправляю более одного сообщения, я получаю сообщение об ошибке

Ошибка преобразования типа данных varchar в числовой.

Вот код.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_getTransfer] @TRANSFER_ID int = null, @COMPANY VARCHAR(5),@FORMTYPE VARCHAR(30), @TRANSFER_IDS VARCHAR(500) = NULL, @SEAL_DATE datetime = NULL AS
-- Declare variables
DECLARE @rc Int

IF @SEAL_DATE IS NULL
BEGIN 
SELECT 
COMPANY,
FORMTYPE,
COMPANY_NAME,
COMPANY_ADDRESS1,
COMPANY_ADDRESS2,
IMID,[DESCRIPTION],AMOUNT,AMOUNT_TRANSFER, 
CONSIDERATION,
TRANSFER_ID, 
[DATE],
CURR, 
CMF_NAME_1, 
CMF_NAME_2, 
CMF_ADDR_1, 
CMF_ADDR_2,
CMF_ADDR_3, 
CMF_ADDR_4, 
CMF_POSTAL_CODE,
Cons_Curr =  CASE
WHEN LTRIM(RTRIM(Cons_Curr)) <> '' THEN Cons_Curr
ELSE CURR
END,
-- Cons_Curr,
TRANSFERYEAR,
TRANSFERMONTH,
TRANSFERDAY,
dbo.CurrencyToWords(CURR) AS CURR_WORDS,
---dbo.CurrencyToWords(Cons_Curr) AS CONNS_CURR_WORDS

CONS_CURR_WORDS = CASE 
WHEN LTRIM(RTRIM(CONS_CURR)) <> '' THEN dbo.CurrencyToWords(CONS_CURR)
ELSE dbo.CurrencyToWords(CURR)
END



   FROM 
VW_TRANSFERS
   WHERE 
TRANSFER_ID= @TRANSFER_ID
AND 
FORMTYPE= @FORMTYPE
AND 
COMPANY = @COMPANY
OR 
TRANSFER_ID IN (@TRANSFER_IDS)
END

ELSE
SELECT 
COMPANY,
FORMTYPE,
COMPANY_NAME,
COMPANY_ADDRESS1,
COMPANY_ADDRESS2,
IMID,[DESCRIPTION],AMOUNT,AMOUNT_TRANSFER, 
CONSIDERATION,
TRANSFER_ID, 
[DATE],
CURR, 
CMF_NAME_1, 
CMF_NAME_2, 
CMF_ADDR_1, 
CMF_ADDR_2,
CMF_ADDR_3, 
CMF_ADDR_4, 
CMF_POSTAL_CODE,
--Cons_Curr,
Cons_Curr =  CASE
WHEN LTRIM(RTRIM(Cons_Curr)) <> '' THEN Cons_Curr
ELSE CURR
END,
TRANSFERYEAR,
TRANSFERMONTH,
TRANSFERDAY,
dbo.CurrencyToWords(CURR) AS CURR_WORDS,
---dbo.CurrencyToWords(Cons_Curr) AS CONNS_CURR_WORDS

CONS_CURR_WORDS = CASE 
WHEN LTRIM(RTRIM(CONS_CURR)) <> '' THEN dbo.CurrencyToWords(CONS_CURR)
ELSE dbo.CurrencyToWords(CURR)
END
   FROM 
VW_TRANSFERS
   WHERE 
FORMTYPE= @FORMTYPE
AND 
COMPANY = @COMPANY
AND
DATE = @SEAL_DATE 
OR 
TRANSFER_ID IN (@TRANSFER_IDS)








EXEC sp_getTransfer NULL, fgb, transfer, '124,444,4555,8865,24,55,69', NULL

Ответы [ 2 ]

4 голосов
/ 16 июля 2009

следующий код не может работать:

TRANSFER_ID IN (@TRANSFER_IDS)

Несколько рабочих альтернатив, описанных здесь:

Массивы и списки в SQL Server

0 голосов
/ 16 июля 2009

Вы должны будете установить это как динамическую хранимую процедуру или пройтись по идентификаторам в коде и каждый раз вызывать хранимый процесс. Вы знаете, как настроить динамическую процедуру?

Пример

ALTER Procedure [dbo].[sp_NAME]
 (@id as varchar(max)
)
as
Declare @query1 as nvarchar(max) 
If @Param is null
set @Param = ''

Set @query1 = '
select whatever
from table
where id in('+@id+')'
EXECUTE sp_executesql @query1  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...