Questions tagged «tsql»

T-SQL(事务结构查询语言)是Sybase ASE和Microsoft SQL Server支持的SQL功能的扩展。请勿将此标签用于MySQL,PostgreSql,Oracle(Pl / SQL)相关查询。请注意,使用LINQ编写的SQL代码也不属于该标签的一部分。该标记是专门为使用Microsoft SQL Server进行高级SQL编程而创建的。


11
LEFT OUTER JOIN如何返回比左表中更多的记录?
我有一个非常基本的LEFT OUTER JOIN,可以从左表中返回所有结果,并从更大的表中返回一些其他信息。左表包含4935条记录,但是当我将其左移到另一个表中时,记录数会大大增加。 据我所知,绝对的福音是,LEFT OUTER JOIN将返回左表中的所有记录,并返回右表中的匹配记录,并为所有无法匹配的行返回空值,因此,我的理解是返回的行数不可能超过左表中存在的行数,但是这都是一样的! SQL查询如下: SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID FROM SUSP.Susp_Visits LEFT OUTER JOIN DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum 也许我在语法上犯了一个错误,或者我对LEFT OUTER JOIN的理解不完整,希望有人能解释这是怎么发生的? 后记 感谢您提供的出色答案,现在我对LEFT OUTER JOINS的了解要好得多,但是有人可以建议修改此查询的方式,以便使我只获得与左表中一样多的返回记录吗? 此查询纯粹是为了生成报告,重复的匹配项只会使事情变得混乱。 /后记

7
SQL JOIN vs IN性能?
在某些情况下,使用JOIN或IN将为我提供正确的结果...哪一种通常具有更好的性能,为什么?它在多大程度上取决于您正在运行的数据库服务器?(仅供参考,我正在使用MSSQL)


23
插入更新触发器如何确定是插入还是更新
我需要在表A上编写一个插入,更新触发器,该操作将从表B的所有行中删除所有行,该表的某一列(例如Desc)的值类似于在表A的列中插入/更新的值(例如Col1)。我将如何编写它,以便同时处理Update和Insert案例。我将如何确定是否为更新或插入执行了触发器。



15
在SQL Server中修剪前导零的更好技术?
我一直在使用这一段时间: SUBSTRING(str_col, PATINDEX('%[^0]%', str_col), LEN(str_col)) 但是最近,我发现包含“ 00000000”之类的所有“ 0”字符的列存在问题,因为它从未找到匹配的非“ 0”字符。 我见过的另一种技术是使用TRIM: REPLACE(LTRIM(REPLACE(str_col, '0', ' ')), ' ', '0') 如果存在嵌入的空格,则会出现问题,因为当空格变成“ 0”时,它们将变成“ 0”。 我试图避免标量UDF。我发现SQL Server 2005中的UDF有很多性能问题。

13
如何以编程方式更改标识列的值?
我有一个MS SQL 2005数据库,其中的表Test带有column ID。ID是一个标识列。 我在此表中有行,并且所有行都有其对应的ID自动递增值。 现在,我想像这样更改此表中的每个ID: ID = ID + 1 但是当我这样做时,我得到一个错误: 无法更新标识列“ ID”。 我已经试过了: ALTER TABLE Test NOCHECK CONSTRAINT ALL set identity_insert ID ON 但这不能解决问题。 我需要在此列设置标识,但是我还需要不时更改值。所以我的问题是如何完成这项任务。

6
Linq to Sql:多个左外部联接
我在弄清楚如何使用LINQ to SQL使用多个左外部联接时遇到麻烦。我了解如何使用一个左外部联接。我正在使用VB.NET。以下是我的SQL语法。 T-SQL SELECT o.OrderNumber, v.VendorName, s.StatusName FROM Orders o LEFT OUTER JOIN Vendors v ON v.Id = o.VendorId LEFT OUTER JOIN Status s ON s.Id = o.StatusId WHERE o.OrderNumber >= 100000 AND o.OrderNumber <= 200000

3
将INSERT INTO和WITH / CTE结合
我的CTE非常复杂,我想将结果插入物理表中。 以下有效吗? INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos ( BatchID, AccountNo, APartyNo, SourceRowID ) WITH tab ( -- some query ) SELECT * FROM tab 我正在考虑使用一个函数来创建此CTE,这将允许我重复使用。有什么想法吗?

2
保持简单以及如何在查询中进行多个CTE
我有这个简单的T-SQL查询,它从一个表中发出一堆列,并且还连接其他相关表中的信息。 我的数据模型很简单。我有一个预定的活动,有参与者。我需要知道每个活动有多少参与者。 我对此的解决方案是添加一个CTE,该CTE对计划的事件进行分组并计算参与者的数量。 这将使我能够在每个计划的活动中加入该信息。使查询保持简单。 我希望使查询保持简单,但是,如果将来在简单查询期间需要访问附加的临时结果,该怎么办? 如果可以有多个CTE,但我不能,我真的很喜欢,对吗?我在这里有什么选择? 我已经排除了在应用程序数据层的视图和操作。我更喜欢隔离我的SQL查询。

4
T-SQL-具有默认参数的功能
我有这个脚本: CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 ) RETURNS BIT AS BEGIN IF EXISTS ( bla bla bla ) RETURN 1; RETURN 0; END GO 我想以这种方式在过程中使用它: IF dbo.CheckIfSFExists( 23 ) = 0 SET @retValue = 'bla bla bla'; 但是我得到了错误: 为过程或函数dbo.CheckIfSFExists提供的参数数量不足。 为什么不起作用?

8
在SQL Server中隐含常数1或0的位
在select语句中用作字段值时,可以将1或0表示为一位吗? 例如 在这种情况下,语句(属于select语句)ICourseBased的类型为int。 case when FC.CourseId is not null then 1 else 0 end as IsCoursedBased 为了使它成为位类型,我必须转换两个值。 case when FC.CourseId is not null then cast(1 as bit) else cast(0 as bit) end as IsCoursedBased 是否有一种简便的方法可以将值表示为位类型而不必每次都强制转换? (我正在使用MS SQL Server 2005)
154 sql  sql-server  tsql  bit 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.