【发布时间】:2026-02-22 10:40:01
【问题描述】:
代码
create table ExampleTable
(
Name varchar(500)
CultureCode(5)
)
insert into ExampleTable values('Dit is een test', 'nl-NL')
insert into ExampleTable values('This is a test', 'en-GB')
insert into ExampleTable values('Ceci est un test', 'fr-FR')
insert into ExampleTable values('Dies ist ein Test', 'de-DE')
create procedure GetNameByCultures
(
@CultureCodes varchar(250)
)
as
begin
//Get ExampleTable items according to the culture codes stated in @CultureCodes
end
-示例:
CREATE TYPE StringListType AS TABLE
(
[str] varchar(5) NULL
)
我正在使用 MS SQL 2012 V11.0.2100.60
情况
我正在尝试找到提取标签的最佳方法(性能方面)。 我想过但尚未测试的方法是:
- 如上所示创建用户定义的表类型。
优点:我知道它在数据库上几乎没有性能。
缺点:我必须在存储过程中添加另一个参数。
- 创建一个按字符分割字符串的函数:','
缺点:我知道在 SQL 中使用“Right”、“Left”、“Like”和其他 varchar 转换/编辑属性很慢
UpSide:我可以将处理保存在数据库中。
在当前情况下,我只在用户定义的表类型中发送一个文化代码。 因此,无法在此 UDTT 中添加文化代码,因为您无法将 UDTT 添加到 UDTT。 我唯一的选择是向存储过程添加另一个参数,这应该不是什么大问题……但我们希望只保留一个。
有没有人碰巧知道另一种(更好的?)方法,或者我应该使用其中一种方法吗?
【问题讨论】:
-
哪种风格的数据库?我假设 [sql] 您的意思是 MS SQL Server。如果是这样,请说出来。并包括版本号。性能和可用技术的范围可能会因您使用的版本而异。
-
使用MS SQL 2012 V11.0.2100.60
-
表值参数是您使用 2008 年以后的最佳方式。阅读these very thorough articles,了解可用的不同方法,以及分析和性能详细信息。
-
@TheunArbeider 我已按要求发布了评论作为答案:-)
标签: sql-server performance sql-server-2012 string-split