필자는 사용자 정의 테이블 유형에 정렬 열을 추가해야 하는지를 알아야하는데,이 사용자 정의 테이블 유형을 사용하여 정렬 할 수 있거나 매개 변수의 순서가 같은 열이없는 경우에도 그대로 유지할 수 있다고 믿을 수 있습니다. 테이블 반환 매개 변수의 정렬 순서가 동일하게 유지됩니까?
이
내 유형 :CREATE TYPE [dbo].[VwdCodeList] AS TABLE(
[VwdCode] [varchar](50) NOT NULL
)
이는 SQL 중 하나입니다 사용할 수 있습니다 : 당신은 내가 정렬 열을 얻을 수 ROW_NUMBER
를 사용하고 볼 수
/// <summary>
/// Inserts all new WatchListCodes for a given watchlist
/// </summary>
public const string InsertWatchListCodes = @"
INSERT INTO [dbo].[WatchListCodes]
([WatchListID]
,[VwdCode]
,[Sort])
SELECT @WatchListID, VwdCode, ROW_NUMBER()OVER(ORDER BY (SELECT 1))
FROM @VwdCodeList;";
값.
sort-column을 테이블 유형에 추가해야합니까, 아니면 동일한 것으로 유지 (문서화)되어 있습니까? 작동하는 것 같습니다.
SqlParameter vwdCodeListParameter = insertWatchListCodeCommand.Parameters.Add("@VwdCodeList", SqlDbType.Structured);
vwdCodeListParameter.TypeName = "[dbo].[VwdCodeList]";
vwdCodeListParameter.Value = WatchListSql.GetVwdCodeRecords(newVwdCodes, true);
int inserted = insertWatchListCodeCommand.ExecuteNonQuery();
GetVwdCodeRecords
반환 IEnumerable<SqlDataRecord>
IEnumerable<string>
에 대한 :
이
내가 그것을 사용하는 ADO.NET 코드입니다.감사합니다. 미래의 독자가 정렬 순서를 어떻게 보장했는지 알고 싶다면. 다른 열을 추가하여 제안 나는 테이블 형을 변형 한 것 :
CREATE TYPE [dbo].[VwdCodeList] AS TABLE(
[VwdCode] [varchar](50) NOT NULL,
[Sort] [smallint] NOT NULL
)
정렬 열이 전달 계산되지 않기 때문에 삽입-SQL도 간단하다
:
public const string InsertWatchListCodes = @"
INSERT INTO [dbo].[WatchListCodes]
([WatchListID]
,[VwdCode]
,[Sort])
SELECT @WatchListID, cl.VwdCode, cl.Sort
FROM @VwdCodeList cl;";
들어 일반적
public static IEnumerable<SqlDataRecord> GetVwdCodeRecords(IEnumerable<string> vwdCodes, bool trimCode = true)
{
short currentSort = 0;
foreach (string vwdCode in vwdCodes)
{
var record = new SqlDataRecord(
new SqlMetaData("VwdCode", SqlDbType.VarChar, 50),
new SqlMetaData("Sort", SqlDbType.SmallInt));
record.SetString(0, trimCode ? vwdCode.Trim() : vwdCode);
record.SetInt16(1, ++currentSort);
yield return record;
}
}
가능성은 테이블 유형 정의에 따라 다릅니다. 예를 들어 테이블 유형에 기본 키를 정의하면 레코드를 다시 가져 오는 순서가 바뀔 수 있습니다. 테이블 형식에 다른 열을 추가하고 ADO.NET 코드에 설정하는 것이 더 안전한 방법입니다. – dasblinkenlight