Я предполагаю, что VS пытается определить список полей, выполняя SP.Но так как он не знает, что передать SP, он использует пустые параметры.Теперь, конечно, ваш оператор выбора завершается неудачей.
Вы можете попробовать добавить следующее к своему SP:
IF ISNULL(@TableName,'') = '' SET @TableName = '<Name of a test table>';
IF ISNULL(@FieldName,'') = '' SET @FieldName = '<Name of some field>';
Используйте имена некоторых полей и таблиц, которые здесь существуют (например,имена, которые вы бы также использовали в своем приложении).
В качестве альтернативы вы можете добавить следующие слова выше exec
:
IF (ISNULL(@TableName, '') = '') OR (ISNULL(@FieldName, '') = '')
BEGIN
SELECT -1 AS NewGeneratedId
RETURN 0
END
РЕДАКТИРОВАТЬ
Кроме того, я хотел бы предупредить вас о проблемах параллелизма, которые я вижу, исходя из того, что делает ваш код.Если этот код должен возвращать уникальный идентификатор для новой записи в некоторой таблице, я бы изменил это следующим образом:
Создайте таблицу NumberSeries
, где каждая строка содержит уникальное имя, возможный диапазон дляИдентификаторы и текущее значение идентификатора.
Создайте хранимую процедуру, которая использует UPDATE ... OUTPUT
, чтобы обновить текущий идентификатор для серии чисел и извлечь его за один шаг.
Таким образом, вы можете быть уверены, чточто создание нового идентификатора - это отдельная операция, которая не вызывает проблем с параллелизмом.