Не уверен, что этот вопрос имеет смысл, но я новичок в CLR/UDT и только что закончил следовать этому примеру здесь: https://docs.microsoft.com/en-us/sql/relational-databases/clr-integration/database-objects/getting-start-with-clr-integration?view=sql-server-2017
То, чего я хочу достичь прямо сейчас, очень похоже. Я пытался добавить строковый параметр в обязательном порядке, но при добавлении объекта С# начинается проблема.
Это мой основной С#:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloName(Person person, [param: SqlFacet(MaxSize=-1)]out string result)
{
SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
result = "Hello, " + person.firstName + " " + person.lastName;
}
А это класс C# Person:
public class Person
{
public string firstName;
public string lastName;
public Person(string firstName, string lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
}
Я могу успешно создать сборку, но это процедура, в которой я застреваю. Я хочу сделать что-то вроде:
CREATE PROCEDURE helloname
(
@person (@firstname nchar(300), @lastname nchar(300))
@result nchar(300) OUTPUT
)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloName
Но после некоторых исследований оказалось, что лучший способ работы с объектами — через UDT. Я последовал другому примеру и создал как таблицу Person, так и PersonType, как показано ниже, в T-SQL:
CREATE TABLE Person
(
FirstName nvarchar(50),
LastName nvarchar(50)
)
Go
CREATE TYPE PersonType AS TABLE
(
FirstName nvarchar(50),
LastName nvarchar(50)
)
Go
Ошибка возникает здесь:
CREATE PROCEDURE helloname
(
@personType PersonType,
@result nchar(300) OUTPUT
)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloName
При попытке выполнения он говорит: «СОЗДАТЬ ПРОЦЕДУРУ для «helloname» не удалось, поскольку типы T-SQL и CLR для параметра «@personType» не совпадают».
Как мне заставить «PersonType» равняться «Person» класса С#, чтобы это работало правильно? Дайте мне знать, если я поступаю совершенно неправильно/если есть более простое решение. В идеале я буду передавать список с несколькими типами переменных внутри Person. Заранее спасибо.