Van*_*alk 2 sql sql-server select insert
我正在尝试设置一个触发器,它将从表中插入某些值并使用该VALUES命令指定其他值.类似下面的代码:
INSERT INTO table_name(ID, Name, Email)
SELECT userID, userName
FROM users_table
WHERE condition1
VALUES ('example@yahoo.com')
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试从表中获取前2个值,ID并且我想指定一个值.Nameemail
如果相关,我还有一个自动增量列(称为crt)table_name.那我该怎么做呢?
该INSERT命令有两种形式:
(1)您可以使用所有值,如文字或SQL Server变量 - 在这种情况下,您可以使用以下INSERT .. VALUES()方法:
INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
VALUES(Value1, Value2, @Variable3, @Variable4, ...., ValueN)
Run Code Online (Sandbox Code Playgroud)
注意:我建议始终明确指定要插入数据的列列表 - 这样,如果您的表突然有一个额外的列,或者您的表有一个IDENTITY或计算列,您将不会有任何令人讨厌的意外.是的 - 这是一个更多的工作 - 一次 - 但是你的INSERT声明尽可能坚实,如果你的桌子改变你就不必经常摆弄它.
(2)如果您没有将所有值作为文字和/或变量,而是希望依赖另一个表,多个表或视图来提供值,那么您可以使用以下INSERT ... SELECT ...方法:
INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
SELECT
SourceColumn1, SourceColumn2, @Variable3, @Variable4, ...., SourceColumnN
FROM
dbo.YourProvidingTableOrView
Run Code Online (Sandbox Code Playgroud)
在这里,你必须定义的一样多的项目SELECT作为你的INSERT期望-以及那些可以从表中(S)(或视图(S))列,或者那些可以文字或变量.再次:明确提供要插入的列的列表 - 参见上文.
您可以使用一个或另一个 -但你不能将两者搅和-你不能使用SELECT,有一个VALUES(...)在它的中间条款-挑两个中的一个-坚持下去.
所以在你的具体案例中,只需使用:
INSERT INTO dbo.table_name (ID, Name, Email)
SELECT userID, userName, 'example@yahoo.com'
FROM users_table
WHERE condition1
Run Code Online (Sandbox Code Playgroud)
像这样的东西,
INSERT INTO table_name (ID, Name, Email)
SELECT userID, userName, 'example@yahoo.com' AS Email
FROM users_table
WHERE ..condition1..
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |