Tag: sql

SQL Server如何在存储过程中处理关于事务的语句?

假设我有一个由多个独立的SELECT,INSERT,UPDATE和DELETE语句组成的存储过程。 没有明确的BEGIN TRANS / COMMIT TRANS / ROLLBACK TRANS逻辑。 SQL Server将如何处理这个存储过程事务明智? 每个陈述会有一个隐含的联系吗? 或者是否会有一个存储过程的事务? 另外,如何使用T-SQL和/或SQL Server Management Studio自己find这个问题? 谢谢!

UNION与WHERE子句

我在Oracle数据库上做了两个查询的UNION 。 他们都有一个WHERE子句。 如果在UNION执行查询之后执行WHERE子句后执行UNION ,那么性能是否有所不同? 例如: SELECT colA, colB FROM tableA WHERE colA > 1 UNION SELECT colA, colB FROM tableB WHERE colA > 1 相比: SELECT * FROM (SELECT colA, colB FROM tableA UNION SELECT colA, colB FROM tableB) WHERE colA > 1 我相信在第二种情况下,它会对影响性能的两个表执行全表扫描。 那是对的吗?

为什么VARCHAR需要长度规格?

为什么我们总是需要指定VARCHAR(length)而不是VARCHAR ? 无论如何,它是dynamic的。 UPD:我很困惑,因为它是强制性的(例如在MySQL中)。

使用左连接select一对多关系中的第一条logging

我试图使用左连接来连接两个表。 结果集只能包含“右”连接表中的第一条logging。 假设我有两个表A和B,如下所示; 表“A” code | emp_no 101 | 12222 102 | 23333 103 | 34444 104 | 45555 105 | 56666 表“B” code | city | county 101 | Glen Oaks | Queens 101 | Astoria | Queens 101 | Flushing | Queens 102 | Ridgewood | Brooklyn 103 | Bayside | New York […]

SQL中的多行注释分隔符是否与供应商无关?

从SQL语句中编辑,build立或摘取樱桃时,我可以发现自己正在与四种stream行的数据库工具之一进行交互。 我一直在求助于DB2和Informix的单行注释。 我在vim中创build了macros来使这个效率稍微高一些,但是我想知道我是否工作太辛苦了。

从存储过程Transact-SQL SQL Server中访问结果集

我正在使用SQL Server 2005,我想知道如何从transact-sql中访问不同的结果集。 下面的存储过程返回两个结果集,如何从另一个存储过程访问它们? CREATE PROCEDURE getOrder (@orderId as numeric) AS BEGIN select order_address, order_number from order_table where order_id = @orderId select item, number_of_items, cost from order_line where order_id = @orderId END 我需要能够遍历两个结果集单独。 编辑:只是为了澄清这个问题,我想testing存储过程。 我有一套从VB.NET客户端使用的存储过程,它返回多个结果集。 这些都不会变成表值函数,实际上我根本不能改变程序。 改变程序不是一个选项。 过程返回的结果集不是相同的数据types或列数。

我们可以有一个外键不是任何其他表中的主键吗?

它写在每本书中,外键实际上是其他表中的主键,但是我们可以在其他表中有一个不是主键的外键

CROSS APPLY vs OUTER APPLY速度差

我正在使用CROSS APPLY来join用户和GeoPhone表,一切工作都很快,但现在我有Phone列的NULL值的用户。 交叉应用在最终输出中跳过这些行。 所以我切换到OUTER APPLY。 但是它的工作速度要慢得多(当总输出行数增加1000倍时,速度要慢15倍以上)。 SELECT TOP (10000) dbo.Users.Login, dbo.Users.Phone, GeoPhone.Country FROM dbo.Users CROSS APPLY (SELECT TOP 1 Country FROM dbo.GeoPhone WHERE dbo.Users.Phone <= dbo.GeoPhone.[End]) GeoPhone 与: SELECT TOP (10000) dbo.Users.Login, dbo.Users.Phone, GeoPhone.Country FROM dbo.Users OUTER APPLY (SELECT TOP 1 Country FROM dbo.GeoPhone WHERE dbo.Users.Phone <= dbo.GeoPhone.[End]) GeoPhone 我试图理解为什么。 正如我所看到的执行计划是不同的。 但理论上我看不到任何可能导致这种放缓的计算。 有任何想法吗? 我最终的解决scheme: SELECT […]

将date和时间字段组合到DateTime,SQL Server 2008

好的 – 我已经问了几个人,而且要做到这一点很简单。 declare @Date date declare @Time time declare @datetime datetime select @Date = convert(Date,GetDate()) select @Time = convert(Time,GetDate()) select @Date, @Time, @Date + @Time (+ operator fails!) 我真的必须:1)转换为一个string,然后转换为date时间字段? 2)使用DateAdd和DatePart先添加小时然后分钟,然后秒…..

从exec(@sql)返回值

我想从Exec(@sql)获取值并赋值给@Rowcount(int) 这是我的查询: 'SET @RowCount = (select count(*) FROM dbo.Comm_Services WHERE CompanyId = '+cast(@CompanyId as char)+' and '+@condition+')'