快速版:以下是最好的,为什么?(或者,还有更好的方法):
SELECT FLOOR(LOG10(Number))+1 AS NumLength FROM Table
SELECT LEN(CONVERT(VARCHAR, Number)) AS NumLength FROM Table
SELECT LEN(CAST(Number AS VARCHAR(10))) AS NumLength FROM Table
Run Code Online (Sandbox Code Playgroud)
更详细一点:
我希望找出最有效的机制来计算整数的字符串表示的长度(更具体地说,是一个自然数 - 总是> 0).
我正在使用MS SQL Server(2005).
我已经提出了上面的3种解决方案,所有这些解决方案似乎都运行良好.
我知道第三个版本可能存在非常大的整数问题,但是现在我们可以假设"数字"长度不超过9位十进制数.
更详细的说明:( 你不必阅读这一点来回答我的问题)
这个查询在事务处理环境中被大量使用.
到目前为止,我已经假设"数字"总是正好是6位数.
但是,现在我必须更新代码以支持4到9位数字.
此SQL是识别卡的卡方案的条件的一部分.
完整查询尝试在开始和结束范围内查找与卡号开头匹配的记录.
所以完整的SQL条件将是这样的:
WHERE
-- Start and End match
((Start=End OR End=0) AND (Start=CAST(LEFT('<card number>', FLOOR(LOG10(Start))+1) AS BIGINT))) OR
-- Start != End
-- >= Start
(Start<=CAST(LEFT('<card number>', FLOOR(LOG10(Start))+1) AS BIGINT) AND
-- <= End
End>=CAST(LEFT('<card number>', FLOOR(LOG10(Start))+1) AS BIGINT))
Run Code Online (Sandbox Code Playgroud)
注意:
我可以重新设计表以使用VARCHAR而不是INT.这将允许我使用"LEN(开始)"而不是"FLOOR(LOG10(开始))+ …
我们的产品是TCP侦听事务处理器.为传入连接分配一个线程来处理连接和一个要使用的DB连接.
我们维护一个数据库连接池,而不是为每个传入的客户端连接建立新的数据库连接的昂贵方法.
数据库连接池可配置:最小/最大大小,增长率等.
一些细节:
最后,问题是:
由于服务可能会在没有重新启动的情况下运行几个月,因此池中的某些数据库连接很可能无效.我想尽可能快地测试给定连接的有效性,然后再将其分配给传入连接.
目前,我通过执行简单的SQL语句做到这一点"选择123",但是我发现这有显著的负面影响性能,当使用并行执行计划.
在代码中非常简短,我正在做的是:
// ... at some point we decide pool needs another connection...
// Set up database connection
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLAllocHandle(SQL_HANDLE_DBC, env, &conn);
SQLDriverConnect(conn, 0, in_str, in_len, out_str, DIM(out_str), &out_len, SQL_DRIVER_NOPROMPT);
// 'conn' is placed in DB connection pool
// ... some time later a new client connection comes in ...
// Execute simple statement to test if 'conn' is still OK
SQLAllocHandle(SQL_HANDLE_STMT, …Run Code Online (Sandbox Code Playgroud) 设备:Belkin Wemo Switch
Dev环境:Windows7上的MS VC++ 2010
我正在尝试使用Windows中的C++枚举UPnP设备的服务.
我有IUPnPDevice指针,可以访问几个属性.
我有IUPnPServices指针,可以计算正确的服务数量(7).
我QueryInterface()用来获取IEnumVARIANT指针(似乎成功).
然而,该Next()方法总是失败HRESULT的0x80040500-意为Windows error 1280 (0x500) - ERROR_ALREADY_FIBER.
这个错误对我没有任何意义.
(我同时使用尝试IEnumVARIANT和IEnumUnknown-作为文档表明它可以是,但都产生相同的结果.)
我已经在完整的源文件下面加上它产生的输出.
[注意:使用我自己设备的udn进行硬编码]
如果有人可以提供帮助,我会非常感激,因为我现在卡住了.
最好的问候,
戴夫
码:
// UpnpTest1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <upnp.h>
static void DumpComError(const TCHAR *api, HRESULT hr);
int _tmain(int argc, _TCHAR* argv[])
{
int retcode=-1; // assume failure …Run Code Online (Sandbox Code Playgroud)