在https://jsfiddle.net/mgjftrdz/1/,而不是以下值:
var availableTags = [
{label: 'honey', value: 1},
{label: 'apples', value: 2},
{label: 'milk', value: 3},
{label: 'tea', value: 4},
我想列出像这样的AirportNames和AirportCodes:
var availableTags = [
{label: 'LAX - Los Angeles Airport', value: 'LAX'},
{label: 'JFK - John F Kennedy Airport', value: 'JFK'},
{label: 'LHR - London Heathrow Airport', value: 'LHR'},
etc
我有一个8101行的表tblAirportNamesAndCodes。
而不是在VB.NET中执行SqlDataReader循环,如:
Try
sqlConnection1.Open()
dr = cmd.ExecuteReader
While dr.Read()
strResult += "{label: '" + dr("AirportName") + "' value: '" + dr("AirportCode") +"'},"
End While
在T-SQL中是否有办法在SQL Server上连接所有并且存储过程只返回一个长字符串?这会更快吗?
答案 0 :(得分:3)
您可以将此查询用作起点:
declare @t as varchar(max)
select @t = coalesce(@t + ',
' + name, name) from syscolumns option (maxdop 1)
select @t
但我建议您在.NET代码中保留格式化逻辑,而不是将其移动到T-SQL。在您的情况下很难看到性能差异,但如果没有在SQL中格式化逻辑,您的代码将更易于维护。
UPD:同意@TomTom关于StringBuilder。
P.S。此示例中的选项(maxdop 1)仅用于保持复杂查询的行顺序。
答案 1 :(得分:2)
是。不要优化错误的元素。
所以,没有。
说真的,如果你在转移8000个小行时遇到问题,那么你要么拥有一个非常糟糕的sql服务器(比我的旧手机还要少)或通过慢速连接(互联网)传输它们。在这两种情况下,SQL都不是您的问题(在第二位,请将Web服务放在SQL Server前面。)
我看到的一个错误代码实际上是这样的:
strResult + =" {label:'" + dr(" AirportName")+"'价值:'" + 博士(" AirportCode")
这在2个级别中很糟糕。
它执行字典查找。在循环之前获取字段的索引,然后由它们访问(即' dr(0)')。这可以优化这一点。
不要像这样把字符串放在一起。将StringBuilder放在适当大小的位置。你分配一串TON只是为了扔掉它们。
上次我做了像我这样的翻版,我在半秒钟内读了50万条词典,所以SQL不是你的问题。但你的VB代码很草率。
如果您通过非常远程服务器的网络连接进行连接 - 如果不添加Web服务,则可以做很多事情。