Tag: tsql

在T-SQL中的Levenshtein距离

我对计算Levenshtein距离的T-SQLalgorithm感兴趣。

Sql Serverstring到date的转换

我想要这样转换一个string: '10/15/2008 10:06:32 PM' 转换为Sql Server中的等效DATETIME值。 在Oracle中,我会这样说: TO_DATE('10/15/2008 10:06:32 PM','MM/DD/YYYY HH:MI:SS AM') 这个问题意味着我必须将stringparsing为其中一种标准格式 ,然后使用其中一种代码进行转换。 对于这样一个普通的操作来说,这似乎很可笑。 有一个更简单的方法吗?

SQL Server查询的最大大小? IN子句? 有一个更好的方法

可能重复: T-SQL WHERE col IN(…) 什么是SQL Server查询的最大大小? (字符数) IN子句的最大大小? 我认为我看到了一些关于Oracle有1000个项目的限制,但是你可以用ANDing 2 INs来解决这个问题。 SQL Server中的类似问题? 更新那么,如果我需要从另一个系统(非关系数据库)中说1000个GUID并对SQL Server执行“JOIN in code”,那么最好的方法是将1000个GUID列表提交给IN子句还是有另一种更高效的技术? 我没有testing过这个,但我不知道我是否可以提交作为XML文档的GUID。 例如 <guids> <guid>809674df-1c22-46eb-bf9a-33dc78beb44a</guid> <guid>257f537f-9c6b-4f14-a90c-ee613b4287f3</guid> </guids> 然后对Doc和Table做一些XQuery JOIN。 效率低于1000条IN子句?

参数嗅探(或欺骗)在SQL Server中

前一段时间,我有一个查询,我为我的一个用户跑了很多。 它还在进化和调整,但最终稳定和运行相当快,所以我们创build了一个存储过程。 到目前为止,如此正常。 存储过程,但是,狗慢。 查询和过程没有实质性区别,但速度变化很大。 [背景,我们正在运行SQL Server 2005.] 一个友好的本地DBA(不再在这里工作)看了一下存储过程,并说“参数欺骗! ( 编辑:虽然它似乎也可能被称为“参数嗅探”,这可能解释了当我试图search出谷歌命中的缺乏)。 我们将一些存储过程抽象为第二个存储过程,将这个新的内部过程调用包装到预先存在的外部过程中,称为外部过程,并且嘿,它和原始查询一样快。 那么,是什么给了? 有人可以解释参数欺骗? 红利信贷 强调如何避免它 build议如何识别可能的原因 讨论替代策略,例如统计数据,指数,关键字,以缓解这种情况

我如何创build一个也允许空值的唯一约束?

我想对我将要用GUID填充的列有一个唯一的约束。 但是,我的数据包含这些列的空值。 如何创build允许多个空值的约束? 这是一个示例场景 。 考虑这个模式: CREATE TABLE People ( Id INT CONSTRAINT PK_MyTable PRIMARY KEY IDENTITY, Name NVARCHAR(250) NOT NULL, LibraryCardId UNIQUEIDENTIFIER NULL, CONSTRAINT UQ_People_LibraryCardId UNIQUE (LibraryCardId) ) 然后看看我想要实现的代码: — This works fine: INSERT INTO People (Name, LibraryCardId) VALUES ('John Doe', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA'); — This also works fine, obviously: INSERT INTO People (Name, LibraryCardId) VALUES […]

T-SQL有一个聚合函数来连接string吗?

可能重复: SQL Server 2000中的Implodetypes函数? 连接行值T-SQL 我有一个观点,我正在查询,看起来像这样: BuildingName PollNumber ———— ———- Foo Centre 12 Foo Centre 13 Foo Centre 14 Bar Hall 15 Bar Hall 16 Baz School 17 我需要编写一个将BuildingNames分组在一起的查询,并显示如下的PollNumbers列表: BuildingName PollNumbers ———— ———– Foo Centre 12, 13, 14 Bar Hall 15, 16 Baz School 17 我怎样才能在T-SQL中做到这一点? 我宁愿不为这个写一个存储过程,因为它看起来像是过度杀伤,但我不完全是一个数据库的人。 看起来像SUM()或AVG()这样的聚合函数就是我所需要的,但是我不知道T-SQL是否有。 我正在使用SQL Server 2005。

填充前导零的string,所以它在SQL Server 2008中的长度是3个字符

在SQL Server 2008 R2中首次创build时,我有一个长达3个字符的string。 我想填充前导零,所以如果它的原始值是'1',那么新的值就是'001'。 或者如果其原始值是“23”,则新值是“023”。 或者如果它的原始值是'124',那么新值与原始值相同。 我正在使用SQL Server 2008 R2。 我将如何使用T-SQL来做到这一点?

如何插入多行而不重复声明的“INSERT INTO dbo.Blah”部分?

我知道我在几年前就已经这样做了,但是我不记得语法,因为大量的关于“批量import”的帮助文档和文章,我找不到任何地方。 这是我想要做的,但语法不完全正确…请,谁做了这个之前,帮助我:) INSERT INTO dbo.MyTable (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally') 我知道这是接近正确的语法。 我可能在那里需要“BULK”这个词,或者什么,我不记得了。 任何想法? 我需要这个SQL Server 2005数据库。 我试过这个代码,无济于事: DECLARE @blah TABLE ( ID INT NOT NULL PRIMARY KEY, Name VARCHAR(100) NOT NULL ) INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy') VALUES (124, 'Jonny') VALUES (125, 'Sally') SELECT * FROM @blah 我Incorrect […]

SQL Server进程队列争用条件

我有一个通过存储过程由多个订单处理器访问的订单队列。 每个处理器传入一个唯一的ID,用于locking下一个20个订单,供自己使用。 存储过程然后将这些logging返回到订单处理器以执行操作。 在某些情况下, 多个处理器可以检索同一个“OrderTable”logging ,并在这个logging上尝试同时对其进行操作。 这最终导致过程中稍后抛出错误。 我的下一步行动是让每个处理器抓取所有可用的命令,并循环处理器,但是我希望简单地使这部分代码线程安全,并允许处理器随时抓取logging。 所以明确 – 任何想法,为什么我遇到这种竞争条件,以及如何解决问题。 BEGIN TRAN UPDATE OrderTable WITH ( ROWLOCK ) SET ProcessorID = @PROCID WHERE OrderID IN ( SELECT TOP ( 20 ) OrderID FROM OrderTable WITH ( ROWLOCK ) WHERE ProcessorID = 0) COMMIT TRAN SELECT OrderID, ProcessorID, etc… FROM OrderTable WHERE ProcessorID = @PROCID

如何检查SQL Server表中是否存在列

如果它不存在,我需要添加一个特定的列。 我有这样的事情,但总是返回false: IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTableName' AND COLUMN_NAME = 'myColumnName') 如何检查SQL Server数据库表中是否存在列?