DLL에서 정적 변수를 사용하는 것이 안전하지 않다고 생각하지만 비슷한 방법이 있거나 현재 컨텍스트에만 존재하는 변수가있는 방법이 있습니까?SQL CLR - 현재 컨텍스트에 대한 "정적"변수
쉼표로 구분 된 문자열을 사용하고 두 개의 열이있는 테이블을 반환하는 UDF를 만들려고합니다. 하나는 원래 문자열의 값의 인덱스/순서이고, 다른 하나는 값 그 자체. 분할은 쉽습니다 (코드 예제는 온라인에 많이 있습니다).하지만 명령을 내리는 것은 불가능 해 보입니다.
IDENTITY
열을 사용해 보았지만 허용되지 않습니다 ("스트리밍 사용자 정의 함수의 결과 테이블에서 IDENTITY 열을 사용할 수 없음"). 정적 vaiable을 사용하는 것은 이동하지 않습니다. . 웹 프로젝트에서 System.Web.HttpContext.Current
을 얻습니다. SQL 프로젝트와 비슷한 것이 있습니까? 아니면 제가 찾고있는 것을하기위한 더 좋은 방법이 있습니까?
SQL
CREATE FUNCTION SplitToInt(@list nvarchar(MAX), @delim nchar(1) = N',')
RETURNS TABLE (Value int)
AS EXTERNAL NAME CompanyName.Functions.SplitToInt
GO
C#을
[SqlFunction(FillRowMethodName = "SplitToIntFillRow")]
public static IEnumerable SplitToInt(SqlString str, SqlString separator)
{
return str.Value.Split(!separator.IsNull && separator.Value.Length > 0 ? separator.Value[0] : ',');
}
public static void SplitToIntFillRow(object row, out int Value)
{
Value = System.Convert.ToInt32((string)row);
}
SQL 테이블 함수를 사용할 수 없습니까? – mslliviu
기본적으로 원본 색인을 검색하는 방법을 알아낼 수 없습니까? – sll
@list 변수는 C#에서 비롯된 것이므로 기본적으로'SELECT * FROM table WHERE id IN (@list) ORDER BY @ list'를 사용해야합니다. – Jocie