标签: t-sql

INSERT vs INSERT INTO

我已经在MS SQL中使用T-SQL一段时间了,不知怎的,每当我必须将数据插入表中时,我倾向于使用语法:

INSERT INTO myTable <something here>
Run Code Online (Sandbox Code Playgroud)

我知道关键字INTO在这里是可选的,我不必使用它,但不知怎的,它在我的案例中成长为习惯.

我的问题是:

  • 使用INSERT语法对比有什么影响INSERT INTO吗?
  • 哪一个完全符合标准?
  • 它们是否在SQL标准的其他实现中都有效?

sql t-sql sql-server

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

如何获取受存储过程影响的记录数?

对于INSERT,UPDATEDELETESQL直接对数据库执行的语句,大多数数据库提供商返回受影响的行数.对于存储过程,受影响的记录数始终为-1.

我们如何获得受存储过程影响的记录数?

sql t-sql sql-server oracle plsql

83
推荐指数
5
解决办法
14万
查看次数

哪个SQL查询更快?过滤加入条件或Where子句?

比较这两个查询.将过滤器放在连接条件或are子句中是否更快.我一直认为它在连接标准上更快,因为它在最快的时刻减少了结果集,但我不确定.

我将构建一些测试来查看,但我也希望得到关于哪个更清晰易读的意见.

查询1

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
WHERE       a.ID = 1            /* <-- Filter here? */
Run Code Online (Sandbox Code Playgroud)

查询2

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
        AND a.ID = 1            /* <-- Or filter here? */
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
Run Code Online (Sandbox Code Playgroud)

编辑

我运行了一些测试,结果显示它实际上非常接近,但该WHERE条款实际上稍快一点!=)

我绝对同意在WHERE条款上应用过滤器更有意义,我只是对性能影响感到好奇.

已确认的时间标准: 143016 ms
已安排时间加入标准: 143256 ms

测试

SET …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008

83
推荐指数
3
解决办法
6万
查看次数

SQL Server"Text"数据类型的WHERE子句

其中[CastleType]在SQL Server中设置为数据类型"text",查询为:

SELECT *
FROM   [Village]
WHERE  [CastleType] = 'foo' 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TEXTVARCHAR数据类型在等于运算符中不兼容.

我是否可以使用WHERE子句查询此数据类型?

t-sql sql-server sql-server-2005

83
推荐指数
4
解决办法
18万
查看次数

为什么SQL中的199.96 - 0 = 200?

我有一些客户收到奇怪的账单.我能够找出核心问题:

SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 200 what the?
SELECT 199.96 - (0.0 * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96
SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * 199.96)) -- 199.96

SELECT 199.96 - (CAST(0.0 AS DECIMAL(19, 4)) * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96
SELECT 199.96 - (CAST(0.0 AS DECIMAL(19, 4)) * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4))))                         -- 199.96 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server precision sqldatatypes sql-server-2016

83
推荐指数
2
解决办法
5941
查看次数

如何仅为列的每个唯一值选择第一行

假设我有一个客户地址表:

CName           |   AddressLine
-------------------------------
John Smith      | 123 Nowheresville
Jane Doe        | 456 Evergreen Terrace
John Smith      | 999 Somewhereelse
Joe Bloggs      | 1 Second Ave
Run Code Online (Sandbox Code Playgroud)

在表中,像John Smith这样的客户可以拥有多个地址.我需要这个表的select查询只返回在'CName'中有重复项的第一行.对于这个表,它应该返回除第3个(或第1个)之外的所有行 - 这两个地址中的任何一个都可以,但只能返回一个.是否有一个关键字我可以根据服务器之前是否已经看过列值来添加到SELECT查询中进行过滤?

sql t-sql sql-server select unique

82
推荐指数
4
解决办法
24万
查看次数

列出有关SQL Server中所有数据库文件的信息

是否可以列出有关SQL Server上所有数据库的文件(MDF/LDF)的信息?

我想得到一个列表,显示哪个数据库正在使用本地磁盘上的文件.

我尝试了什么:

  • exec sp_databases 所有数据库
  • select * from sys.databases 显示了有关每个数据库的大量信息 - 但不幸的是,它没有显示每个数据库使用的文件.
  • select * from sys.database_files显示master数据库的mdf/ldf文件- 但不显示其他数据库

t-sql sql-server database-management sql-server-2008

82
推荐指数
4
解决办法
20万
查看次数

如何将字符串转换为日期T-SQL?

如何在T-SQL中将字符串转换为日期?

我的测试用例是字符串: '24.04.2012'

t-sql sql-server-2005

82
推荐指数
5
解决办法
30万
查看次数

计算两点之间的距离(纬度,经度)

我试图计算地图上两个位置之间的距离.我存储了我的数据:经度,纬度,X POS,Y POS.

我以前使用过下面的代码片段.

DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
    3956 * 2 * ASIN(
          SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2) 
              + COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)  
              * POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) )) 
          AS distance
--INTO #includeDistances
FROM #orig dest
Run Code Online (Sandbox Code Playgroud)

不过我不相信这个数据,它似乎给出了稍微不准确的结果.

一些示例数据,以备您需要时使用

Latitude        Longitude     Distance 
53.429108       -2.500953     85.2981833133896
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决我的代码,我不介意你是否想要修复我已经拥有的东西,如果你有一种新方法可以实现这一点,那就太棒了.

请说明您的结果所在的计量单位.

sql t-sql sql-server math sql-server-2008-r2

82
推荐指数
5
解决办法
16万
查看次数

如何在T-SQL中将datetime转换为字符串

我很惊讶不能在这里找到这个问题.

我有一个日期时间var,我想将它转换为一个字符串,以便我可以将它附加到另一个字符串.我希望它的格式可以很容易地转换回日期时间.

我怎样才能做到这一点?

(我想要日期部分和时间部分.)

t-sql sql-server

82
推荐指数
6
解决办法
28万
查看次数