小编use*_*935的帖子

SQL中的整数长度(即十进制字符串的长度)

快速版:以下是最好的,为什么?(或者,还有更好的方法):

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(开始))+ …

sql sql-server sql-server-2005

9
推荐指数
1
解决办法
4万
查看次数

测试ODBC连接的有效方法

我们的产品是TCP侦听事务处理器.为传入连接分配一个线程来处理连接和一个要使用的DB连接.

我们维护一个数据库连接池,而不是为每个传入的客户端连接建立新的数据库连接的昂贵方法.

数据库连接池可配置:最小/最大大小,增长率等.

一些细节:

  • 平台是Windows 2003/2008 R2
  • DB是SQL Server 2005/2008 R2
  • 连接方法是ODBC
  • 编程语言是C++

最后,问题是:

由于服务可能会在没有重新启动的情况下运行几个月,因此池中的某些数据库连接很可能无效.我想尽可能快地测试给定连接的有效性,然后再将其分配给传入连接.

目前,我通过执行简单的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)

c++ database sql-server odbc

9
推荐指数
1
解决办法
4533
查看次数

如何访问UPnP设备的服务?

设备:Belkin Wemo Switch
Dev环境:Windows7上的MS VC++ 2010

我正在尝试使用Windows中的C++枚举UPnP设备的服务.

我有IUPnPDevice指针,可以访问几个属性.
我有IUPnPServices指针,可以计算正确的服务数量(7).
QueryInterface()用来获取IEnumVARIANT指针(似乎成功).
然而,该Next()方法总是失败HRESULT0x80040500-意为Windows error 1280 (0x500) - ERROR_ALREADY_FIBER.
这个错误对我没有任何意义.

(我同时使用尝试IEnumVARIANTIEnumUnknown-作为文档表明它可以是,但都产生相同的结果.)

我已经在完整的源文件下面加上它产生的输出.
[注意:使用我自己设备的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)

c++ windows com upnp

6
推荐指数
1
解决办法
2925
查看次数

标签 统计

c++ ×2

sql-server ×2

com ×1

database ×1

odbc ×1

sql ×1

sql-server-2005 ×1

upnp ×1

windows ×1