![](/img/trans.png)
[英]How to enter nvarchar data type in varcher datatype column in SQL Server?
[英]Index on nvarchar datatype with XML data in SQL Server
我有一个具有这种结构的表:
CREATE TABLE [dbo].[GasTests]
(
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[GasReceptionId] [bigint] NOT NULL,
[LineId] [bigint] NOT NULL,
[LabelCode] [nvarchar](max) NULL,
[StartTestDatetime] [datetime] NULL,
[EndTestDatetime] [datetime] NULL,
[ResultTest] [nvarchar](max) NULL,
CONSTRAINT [PK_dbo.GasTests]
PRIMARY KEY CLUSTERED ([Id] ASC)
)
在resulttest中,我存储这样的xml数据类型:
<?xml version="1.0" encoding="utf-16"?>
<GasResultTestParameterView xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ReceptionId>86</ReceptionId>
<ISIRI_9426_C1>on</ISIRI_9426_C1>
<ISIRI_9426_C2>on</ISIRI_9426_C2>
<ISIRI_9426_C3>on</ISIRI_9426_C3>
<ISIRI_9426_C4>on</ISIRI_9426_C4>
<ISIRI_9426_C5>on</ISIRI_9426_C5>
<ISIRI_9426_C6>on</ISIRI_9426_C6>
<ISIRI_9426_C7>on</ISIRI_9426_C7>
<ISIRI_9426_C8>on</ISIRI_9426_C8>
<ISIRI_9426_C9>on</ISIRI_9426_C9>
<ISIRI_9426_C10>on</ISIRI_9426_C10>
<ISIRI_9426_C11>on</ISIRI_9426_C11>
<ISIRI_9426_C12>on</ISIRI_9426_C12>
<ISIRI_9426_C13>on</ISIRI_9426_C13>
<ISIRI_9426_C14>on</ISIRI_9426_C14>
<ISIRI_9426_C15>on</ISIRI_9426_C15>
<ISIRI_9426_C16>on</ISIRI_9426_C16>
<ISIRI_9426_C17>on</ISIRI_9426_C17>
<ISIRI_9426_C18>on</ISIRI_9426_C18>
<ISIRI_9426_C19>on</ISIRI_9426_C19>
<ISIRI_9426_C20>on</ISIRI_9426_C20>
<ISIRI_9426_C21>on</ISIRI_9426_C21>
<ISIRI_9426_C22>on</ISIRI_9426_C22>
<ISIRI_9426_C23>on</ISIRI_9426_C23>
<ISIRI_9426_C24>on</ISIRI_9426_C24>
<ISIRI_9426_C25>on</ISIRI_9426_C25>
<ISIRI_9426_C26>on</ISIRI_9426_C26>
<ISIRI_9426_C27>on</ISIRI_9426_C27>
<ISIRI_9426_C28>on</ISIRI_9426_C28>
<ISIRI_9426_C29>on</ISIRI_9426_C29>
<ISIRI_9426_C30>on</ISIRI_9426_C30>
<ISIRI_9747_K1>on</ISIRI_9747_K1>
<ISIRI_9747_K2>on</ISIRI_9747_K2>
<ISIRI_9747_K3>on</ISIRI_9747_K3>
<ISIRI_9747_K4>on</ISIRI_9747_K4>
<ISIRI_9747_K5>on</ISIRI_9747_K5>
<ISIRI_9747_K6>on</ISIRI_9747_K6>
<ISIRI_9747_K7>on</ISIRI_9747_K7>
<ISIRI_9747_K8>on</ISIRI_9747_K8>
<ISIRI_9747_K9>on</ISIRI_9747_K9>
<ISIRI_9747_K10>on</ISIRI_9747_K10>
<ISIRI_9747_K11>on</ISIRI_9747_K11>
<ISIRI_9747_K12>on</ISIRI_9747_K12>
<ISIRI_9747_K13>on</ISIRI_9747_K13>
<ISIRI_9747_K14>on</ISIRI_9747_K14>
<ISIRI_9747_K15>on</ISIRI_9747_K15>
<ISIRI_9747_K16>on</ISIRI_9747_K16>
<ISIRI_9747_K17>on</ISIRI_9747_K17>
<ISIRI_9747_K18>on</ISIRI_9747_K18>
<ISIRI_9747_K19>on</ISIRI_9747_K19>
<ISIRI_9747_K20>on</ISIRI_9747_K20>
<ISIRI_9747_K21>on</ISIRI_9747_K21>
<ISIRI_9747_K22>on</ISIRI_9747_K22>
<ISIRI_9747_K23>on</ISIRI_9747_K23>
<ISIRI_9747_K24>on</ISIRI_9747_K24>
<ISIRI_9747_K25>on</ISIRI_9747_K25>
<ISIRI_9747_K26>on</ISIRI_9747_K26>
<ISIRI_9747_K27>on</ISIRI_9747_K27>
<ISIRI_9747_K28>on</ISIRI_9747_K28>
<ISIRI_9747_K29>on</ISIRI_9747_K29>
<ISIRI_9747_K30>on</ISIRI_9747_K30>
<ISIRI_9747_K31>on</ISIRI_9747_K31>
<ISIRI_9747_K32>on</ISIRI_9747_K32>
<ISIRI_9747_K33>on</ISIRI_9747_K33>
<ISIRI_9747_K34>on</ISIRI_9747_K34>
<ISIRI_9747_K35>on</ISIRI_9747_K35>
<ISIRI_9747_K36>on</ISIRI_9747_K36>
<ISIRI_9747_K37>on</ISIRI_9747_K37>
<ISIRI_9747_K38>on</ISIRI_9747_K38>
<ISIRI_9747_K39>on</ISIRI_9747_K39>
<ISIRI_9747_K40>on</ISIRI_9747_K40>
<ISIRI_9747_K41>on</ISIRI_9747_K41>
<ISIRI_9747_K42>on</ISIRI_9747_K42>
<ISIRI_9747_K43>on</ISIRI_9747_K43>
<ISIRI_9747_K44>on</ISIRI_9747_K44>
<ISIRI_9747_K45>on</ISIRI_9747_K45>
<ISIRI_9747_K46>on</ISIRI_9747_K46>
<TapCompany>LANDIRENZO</TapCompany>
<TapSerialNumber>039837</TapSerialNumber>
<RegulatorCompany>OMVL</RegulatorCompany>
<RegulatorSerialNumber>039837</RegulatorSerialNumber>
<CapsuleCompany>JINDUN</CapsuleCompany>
<CapsuleSerialNumber>1004986</CapsuleSerialNumber>
<CapsuleType>2</CapsuleType>
<CapsuleBuiltDate>1391</CapsuleBuiltDate>
<CapsuleExpireDate>1402</CapsuleExpireDate>
<GasSystemGeneration>2</GasSystemGeneration>
<Remark>تایید</Remark>
<PassedISIRI9747>on</PassedISIRI9747>
<PassedISIRI9426>on</PassedISIRI9426>
<PassedISIRI6792>noneed</PassedISIRI6792>
</GasResultTestParameterView>
我需要大量基于xml结果的报告。 但是,当我想在XML中搜索项目时,会花费很多时间。 如何使表和xml更快?
如果将Resulttest
列定义为XML
,则可以从XML中获取各个位并将其存储为表列 (作为计算列) 。
以XML格式存储有两个主要好处:
XML
列可让您在其上使用XQuery函数来处理XML结构 首先,定义一个这样的标量函数(假设您想“ TapCompany
” TapCompany
值):
CREATE FUNCTION dbo.GetTapCompany(@Input XML)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @Result VARCHAR(100)
SELECT @Result = @Input.value('(/GasResultTestParameterView/TapCompany)[1]', 'VARCHAR(100)')
RETURN @Result
END
此函数将XML值(来自表行)作为输入,进入XML并获取TapCompany
值,然后将其返回。
然后,将其作为列添加到数据库表中:
ALTER TABLE dbo.GasTests
ADD TapCompany AS dbo.GetTapCompany(Resulttest);
现在,您应该能够从表中进行选择,并获得TapCompany
的值以及其他表的值:
SELECT
Id,
GasReceptionId,
LineId,
LabelCode,
TapCompany
FROM
dbo.GasTests
不幸的是,您不能使该列持久存在 -因此,每次从该表中选择并包括该列时,都会调用提供该值的标量函数。 因此,我不确定您是否会看到任何性能改进-但我认为应该很容易检查一下-使用您的真实数据-试试看!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.