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