标签: t-sql

如何在不重复声明的"INSERT INTO dbo.Blah"部分的情况下插入多行?

我知道我已经在几年前做过这个了,但是我记不起语法了,由于提取了大量关于"批量进口"的帮助文档和文章,我无法在任何地方找到它.

这是我想要做的,但语法不完全正确...请,之前做过这个的人,帮帮我:)

INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
    (124, 'Jonny'),
    (125, 'Sally')
Run Code Online (Sandbox Code Playgroud)

我知道这接近正确的语法.我可能在那里需要"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
Run Code Online (Sandbox Code Playgroud)

我越来越 Incorrect syntax near the keyword 'VALUES'.

t-sql sql-server sql-server-2005 insert

518
推荐指数
12
解决办法
75万
查看次数

删除SQL Server中datetime时间部分的最佳方法

从SQL Server中的datetime字段中删除时间部分时,哪种方法提供了最佳性能?

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Run Code Online (Sandbox Code Playgroud)

要么

b) select cast(convert(char(11), getdate(), 113) as datetime)
Run Code Online (Sandbox Code Playgroud)

第二种方法确实发送了更多的字节,但这可能没有转换速度那么重要.

两者似乎都非常快,但在处理数十万或更多行时速度可能会有所不同?

另外,是否有可能有更好的方法来摆脱SQL中日期时间的时间部分?

sql t-sql sql-server datetime date

501
推荐指数
8
解决办法
73万
查看次数

T-SQL:选择要通过连接删除的行

场景:

假设我有两个表,TableA和TableB.TableB的主键是单列(BId),是TableA中的外键列.

在我的情况下,我想删除TableA中与TableB中的特定行链接的所有行:我可以通过连接执行此操作吗?删除从连接中提取的所有行?

DELETE FROM TableA 
FROM
   TableA a
   INNER JOIN TableB b
      ON b.BId = a.BId
      AND [my filter condition]
Run Code Online (Sandbox Code Playgroud)

或者我被迫这样做:

DELETE FROM TableA
WHERE
   BId IN (SELECT BId FROM TableB WHERE [my filter condition])
Run Code Online (Sandbox Code Playgroud)

我问的原因是在我看来,在处理较大的表时,第一个选项会更有效.

谢谢!

t-sql join

486
推荐指数
5
解决办法
39万
查看次数

如何拆分字符串以便我可以访问项目x?

使用SQL Server,如何拆分字符串以便访问项目x?

拿一个字符串"Hello John Smith".如何按空格分割字符串并访问索引1处应该返回"John"的项目?

sql t-sql sql-server split

480
推荐指数
17
解决办法
82万
查看次数

获得每组的前1行

我有一张桌子,我希望得到每组的最新条目.这是表格:

DocumentStatusLogs

|ID| DocumentID | Status | DateCreated |
| 2| 1          | S1     | 7/29/2011   |
| 3| 1          | S2     | 7/30/2011   |
| 6| 1          | S1     | 8/02/2011   |
| 1| 2          | S1     | 7/28/2011   |
| 4| 2          | S2     | 7/30/2011   |
| 5| 2          | S3     | 8/01/2011   |
| 6| 3          | S1     | 8/02/2011   |
Run Code Online (Sandbox Code Playgroud)

该表将按降序分组DocumentID并按DateCreated降序排序.对于每一个DocumentID,我想获得最新状态.

我的首选输出:

| DocumentID | Status | DateCreated …
Run Code Online (Sandbox Code Playgroud)

sql t-sql group-by sql-server-2005 greatest-n-per-group

474
推荐指数
12
解决办法
54万
查看次数

SQL Server中1/1/1753的重要性是什么?

为什么1753?他们对1752有什么看法?我伟大伟大伟大曾伟大的曾祖父会非常生气.

t-sql sql-server datetime localization internationalization

453
推荐指数
5
解决办法
12万
查看次数

无法截断表,因为它是由FOREIGN KEY约束引用的?

使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?

我知道我也可以

  • 使用DELETE不带where子句然后RESEED使用身份(或)
  • 删除FK,截断表,然后重新创建FK.

我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:

无法截断表'TableName',因为它正被FOREIGN KEY约束引用.

t-sql sql-server truncate sql-server-2005 foreign-keys

427
推荐指数
16
解决办法
61万
查看次数

从存储过程的结果集中选择列

我有一个存储过程返回80列和300行.我想写一个选择,获得其中2列.就像是

SELECT col1, col2 FROM EXEC MyStoredProc 'param1', 'param2'
Run Code Online (Sandbox Code Playgroud)

当我使用上面的语法时,我得到错误:

"无效的列名称".

我知道最简单的解决方案是更改存储过程,但我没有写它,我无法改变它.

有什么办法可以做我想要的吗?

  • 我可以创建一个临时表来放置结果,但因为有80列所以我需要制作一个80列的临时表来获得2列.我想避免追踪返回的所有列.

  • WITH SprocResults AS ....按照马克的建议尝试使用,但我遇到了2个错误

    关键字"EXEC"附近的语法不正确.
    ')'附近的语法不正确.

  • 我尝试声明一个表变量,我得到以下错误

    插入错误:列名或提供的值数与表定义不匹配

  • 如果我尝试
    SELECT * FROM EXEC MyStoredProc 'param1', 'param2'
    我得到错误:

    关键字'exec'附近的语法不正确.

t-sql sql-server select stored-procedures

426
推荐指数
12
解决办法
62万
查看次数

如何从一个表中选择另一个表中不存在的所有记录?

table1(id,name)
table2(id,name)

查询:

SELECT name   
FROM table2  
-- that are not in table1 already
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

423
推荐指数
11
解决办法
74万
查看次数

选择语句以查找某些字段的重复项

你能帮我用SQL语句来查找多个字段的重复项吗?

例如,在伪代码中:

select count(field1,field2,field3) 
from table 
where the combination of field1, field2, field3 occurs multiple times
Run Code Online (Sandbox Code Playgroud)

并且从上面的陈述中,如果有多次出现,我想选择除第一个以外的每个记录.

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

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