Я использую C # и SQL Server в среде Windows с Visual Studio 2017. Я пытаюсь передать таблицу данных (называемую @profiles
) в сценарий SQL.
Чтобы сделать это, я сначала должен создать тип таблицы, которая соответствует таблице данных, переданной.
Проблема заключается в том, что во всех случаях, когда я пытался заполнить новую таблицу пропущенными данными, я получаю одно из двух исключений:
"Столбец, параметр или переменная @profiles.: Не удается найти тип данных ProfileIdTableType."
"Параметр типа таблицы '@profiles' должен иметь правильное имя типа."
Из того, что я искал, я обнаружил, что таблица данных с новым типом таблицы обычно используется с процедурой, но неважно - я все еще получаю вышеупомянутые исключения.
Я попытался объявить новый тип таблицы и использовать @profiles
с ним безуспешно.
Когда я объявляю SqlParameter
, который я использую для его передачи, я обычно сталкиваюсь с первым исключением (не могу найти тип)
Я должен упомянуть, что не могу найти созданный тип в разделе «Программируемость» SQL Server (но у меня тип temp и так и должно быть)
Это два способа передачи данных в сценарий из C #:
SqlParameter @profiles = new SqlParameter("@profiles", profileIds.Tables[0]);
profiles.TypeName = "ProfileIdTableType";
или
DbParameter @profiles = new SqlParameter("@profiles", profileIds.Tables[0]);
и затем используйте его:
updatedProfiles = (int)DbAdminOps.ExecuteNonQueryCommand(updateProfileSettingsCommand, CommandType.Text, new DbParameter[] { @profiles, @updatedTemplate }, null);
Это SQL-скрипт, который я использовал в последний раз (но перепробовал множество вариантов, не представленных здесь)
-- create a table type of profile Ids passed by user
CREATE TYPE ProfileIdTableType AS TABLE (ID INT)
go
DECLARE @PRFL ProfileIdTableType
GO
CREATE PROCEDURE PopulateTable
@profiles ProfileIdTableType READONLY
AS
INSERT INTO @PRFL(ID)
SELECT [ID] FROM @profiles
GO
@profiles ProfileIdTableType
EXEC PopulateTable @profiles
go
Я ожидал, что @profiles будет распознан как таблица, поэтому я могу использовать ее в своем сценарии, но все, что я получаю, - это исключение. Я приложил много усилий, но не смог.
Прошел все вопросы о переполнении стека, YouTube, документацию Microsoft и веб.
Если есть какая-то информация, которую я пропустил и которая важна - дайте мне знать.
Был бы очень признателен за совет.
Ура!