Stored Proc:Ошибка преобразования типа данных NVARCHAR к BigInt вызвано оператором IN в хранимой процедуре
ALTER PROCEDURE [dbo].[MyProcedure]
@CommaSeperatedValues nvarchar(500)
AS
BEGIN
SET NOCOUNT ON;
SELECT Col1, Col2, Col3
FROM MyTable
WHERE SomeCol_BigIntDataType IN (@CommaSeperatedValues)
Значение, которое исходит от кодекса значение строки: "9010073,9010074"
Я попытался запустить СП, как это: EXEC MyProcedure «9010073,9010074»
Это дает сообщение об ошибке «ошибка преобразования типа данных NVARCHAR в BigInt» во время работы SP
Если я бегу запрос выбора отдельно, например:
SELECT Col1, Col2, Col3
FROM MyTable
WHERE SomeCol_BigIntDataType IN (9010073,9010074)
Затем я получаю ожидаемые результаты.
Но я хочу бежать из SP.
Сначала вы должны преобразовать CVS в строки. –
Вам нужно иметь функцию SplitString named, которая разделит строку на понятную строку SQL SERVER, которая затем может быть использована в операторе IN. Что-то вроде «Выберите часть из SplitString (@Values, ',') –
Лучше использовать тип данных *, предназначенный * для хранения нескольких значений, таких как табличный параметр или даже xml, вместо того, чтобы набивать несколько значений в строка. SQL (как и большинство языков) не принимает ни одного строкового значения, обратите внимание, что он содержит запятые, а затем решил действовать так, как если бы вы фактически предоставили ему несколько значений. –