У меня есть функция SQL CLR, как этот:CLR Table-функция с аргументом массива
public partial class UserDefinedFunctions {
[Microsoft.SqlServer.Server.SqlFunction(TableDefinition = "number int", FillRowMethodName = "FillRow")]
public static IEnumerable MyClrFunction(object obj) {
// read obj array input and then
var result = new ArrayList();
result.Add((SqlInt32)1);
result.Add((SqlInt32)2);
result.Add((SqlInt32)3);
return result;
}
public static void FillRow(object obj, out SqlInt32 number) {
number = (SqlInt32)obj;
}
}
Я хотел бы использовать его таким образом:
DECLARE @x arrayOfInt
INSERT INTO @x VALUES (10)
INSERT INTO @x VALUES (20)
INSERT INTO @x VALUES (30)
SELECT * FROM dbo.MyClrFunction(@x)
arrayOfInt является:
CREATE TYPE [dbo].[arrayOfInt] AS TABLE(
[item] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[item] ASC
) WITH (IGNORE_DUP_KEY = OFF)
)
Проблема У меня есть то, что arrayOfInt несовместим с sql_variant. Можно ли написать CLR Table-value функцию, которая имеет аргумент array (table)?
это смешно: «вы всегда можете отправить в ограниченном списке значений», потому что я оказался здесь, ища пути, чтобы пройти в таблице строк, так что я мог бы использовать CLR объединить их в одну разделительную строку :) – BigOmega