vinodh muthusamy Ответов: 1

Sql запрос не может получить значение в предложении in при использовании storeprocedure


Я создал sql-запрос, который работает в обычном наборе данных, когда я пытаюсь использовать тот же запрос с помощью процедуры хранения, результат не извлекает значение.



string datatypeval="'first name','address'";
 string FieldNames1 = "select FId,DataTypeName from tbl_fieldname where DataTypeName in(" + datatypeval + ");";


Вышеописанный запрос работает отлично.

При использовании процедуры хранения она не извлекает выходное значение.

DataTable dt1 = dataval(datatypeval);


public static DataTable dataval(string datatypeval)
    {
        try
        {
            DataTable dt1;
            string[] ColumnName = new string[1];
            string[] values = new string[1];
            ColumnName[0] = "@dataval"; values[0] = datatypeval;
            dt1 = returnDatatable("datatype_Details", ColumnName, values);
            return dt1;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
public static DataTable returnDatatable(string SPName, string[] ParameterName, string[] Values)
    {
        DataTable ds = new DataTable();
        try
        {
            openDBConnection();
            SqlConnection mssqlConn = mssqlConnection;
            SqlCommand Cmd = new SqlCommand(SPName, mssqlConn);
            SqlDataAdapter da = new SqlDataAdapter(Cmd);
            Cmd.CommandType = CommandType.StoredProcedure;
            for (int i = 0; i < ParameterName.Length; i++)
            {
                Cmd.Parameters.AddWithValue(ParameterName[i], Values[i]);
            }
            da.Fill(ds);
        }
        catch (Exception ex)
        {
           throw ex;
        }
        finally
        {
            closeDBConnection();
        }
        return ds;
    }


Мой SP-код:

ALTER PROCEDURE [dbo].[datatype_Details]
(
@dataval VARCHAR 
) 
AS
BEGIN
	 
	select FId,DataTypeName from tbl_fieldname  where DataTypeName in(@dataval)
END


Что я уже пробовал:

DataTable dt1 = dataval(datatypeval);
public static DataTable dataval(string datatypeval)
    {
        try
        {
            DataTable dt1;
            string[] ColumnName = new string[1];
            string[] values = new string[1];
            ColumnName[0] = "@dataval"; values[0] = datatypeval;
            dt1 = returnDatatable("datatype_Details", ColumnName, values);
            return dt1;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
public static DataTable returnDatatable(string SPName, string[] ParameterName, string[] Values)
    {
        DataTable ds = new DataTable();
        try
        {
            openDBConnection();
            SqlConnection mssqlConn = mssqlConnection;
            SqlCommand Cmd = new SqlCommand(SPName, mssqlConn);
            SqlDataAdapter da = new SqlDataAdapter(Cmd);
            Cmd.CommandType = CommandType.StoredProcedure;
            for (int i = 0; i < ParameterName.Length; i++)
            {
                Cmd.Parameters.AddWithValue(ParameterName[i], Values[i]);
            }
            da.Fill(ds);
        }
        catch (Exception ex)
        {
           throw ex;
        }
        finally
        {
            closeDBConnection();
        }
        return ds;
    }

_Asif_

Вам нужно, чтобы поделиться своими СП-код, а также

vinodh muthusamy

Вот мой код СП

Изменить процедуру [dbo].[datatype_Details]
(
@dataval тип varchar
)
АС
НАЧАТЬ

выберите FId, DataTypeName из tbl_fieldname, где DataTypeName in (@dataval)
КОНЕЦ

_Asif_

Доля СП тестовый скрипт.

vinodh muthusamy

как проверить тестовый скрипт

_Asif_

SPs нужно тестировать отдельно, обычно с помощью SQL Server Management Studio. Например, тестовый сценарий может быть таким.

Объявите @dataval VARCHAR(200)
Выберите @dataval = 'varchar';

Старпома datatype_Details @Dataval;

И проверьте, работает ли SP в соответствии с требованиями. Если нет, то исправьте SP.

vinodh muthusamy

Объявите @dataval VARCHAR(200)
Выберите @dataval = ('имя', 'адрес');

Старпома datatype_Details @Dataval;

Он выдает ошибку как

Msg 102, Уровень 15, Состояние 1, Строка 2
Неправильный синтаксис рядом с ','.

_Asif_

надеюсь, вы сами поняли, почему это синтаксическая ошибка. В любом случае, чтобы исправить это, вам нужно посмотреть на следующий совет

http://stackoverflow.com/questions/3735152/most-succinct-way-to-transform-a-csv-string-to-an-table-in-tsql


Ваш SP должен быть изменен, чтобы использовать вышеприведенный Совет, похожий на что-то вроде этого
выберите FId, DataTypeName из tbl_fieldname T
Внутреннее соединение dbo.Split (@dataval,',') M ON T. DataTypeName = M. items