在我看来这听起来不太可能,但我想知道我是否可以这样做:
INSERT INTO MyTable (Name)
VALUES ('First'),
('Second'),
('Third'),
('Fourth'),
('Fifth');
SELECT INSERTED Name, ID FROM TheAboveQuery
ID是自动索引列吗?
为了澄清,我想只选择新插入的行。
答案 0 :(得分:4)
从SQL Server 2008开始,您可以将OUTPUT子句与INSERT语句一起使用
DECLARE @T TABLE (ID INT, Name NVARCHAR(100))
INSERT INTO MyTable (Name)
OUTPUT INSERTED.ID, INSERTED.Name INTO @T
VALUES
('First'),
('Second'),
('Third'),
('Fourth'),
('Fifth');
SELECT Name, ID FROM @T;
更新:如果表没有触发器
INSERT INTO MyTable (Name)
OUTPUT INSERTED.ID, INSERTED.Name
VALUES
('First'),
('Second'),
('Third'),
('Fourth'),
('Fifth');
答案 1 :(得分:2)
当然,您可以在ID
字段上使用IDENTITY
属性,并在其上创建CLUSTERED INDEX
create table MyTable ( ID int identity(1,1),
[Name] varchar(64),
constraint [PK_MyTable] primary key clustered (ID asc) on [Primary]
)
--suppose this data already existed...
INSERT INTO MyTable (Name)
VALUES
('First'),
('Second'),
('Third'),
('Fourth'),
('Fifth');
--now we insert some more... and then only return these rows
INSERT INTO MyTable (Name)
VALUES
('Sixth'),
('Seventh')
select top (@@ROWCOUNT)
ID,
Name
from MyTable
order by ID desc
@@ROWCOUNT
返回受执行的 last 语句影响的行数。您始终可以在SQL Server Management Studio的“消息”选项卡中看到此内容。因此,我们获取插入的行数并将其与TOP
组合,这将查询中返回的行限制为指定的行数(如果使用[PERCENT],则为百分比)。 使用ORDER BY
时使用TOP
非常重要,否则results aren't guaranteed to be the same
从我之前编辑过的答案......
如果您正在尝试查看插入了哪些值,那么我假设您以不同的方式插入它们,这通常使用OUTPUT子句处理,如果您在尝试对这些记录执行某些操作后触发TRIGGER插入等...需要更多信息。