Не уверен, что этот вопрос имеет смысл, но я новичок в CLR / UDT и только что закончил, следуя приведенному ниже примеру: https://docs.microsoft.com/en-us/sql/relational-databases/clr-integration/database-objects/getting-started-with-clr-integration?view=sql-server-2017
То, чего я хочу достичь сейчас, очень похоже.Я попытался добавить в строковом параметре в обязательном порядке, но при добавлении объекта C #, где проблема начинается.
Это мой C # Main:
[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» не совпадают.должным образом?Дайте мне знать, если я пойду по этому поводу совершенно неправильно / если есть более простое решение.В идеале я буду передавать список с несколькими типами переменных внутри Person.Заранее спасибо.