Mat*_*iby -2 sql sql-server insert sql-server-2008
好的,这就是我的查询......我刚刚添加了ACCOUNTID和@accountID部分,这显然不起作用
INSERT INTO Leads (
LEADID,
CREATEUSER,
CREATEDATE,
FIRSTNAME,
MODIFYDATE,
ACCOUNTID
)
SELECT
'Q' + cast(floor(999997 * RAND(convert(varbinary, newid()))) as varchar(20))
,'U6UJ9000S'
,CURRENT_TIMESTAMP
,'U6UJ9000S'
,name
,@accountID
FROM Temp
Run Code Online (Sandbox Code Playgroud)
我想要做的是先在帐户表中插入并获取该ID,并将插入ID添加到此插入引导表中.这甚至是可能的
基本上对于Temp表中的每条记录,我需要在帐户表中插入一条记录,没有值只需要account_id所以当我在lead表中插入时,我有了帐号id来进行插入
建立:
USE TempDB;
GO
CREATE TABLE dbo.Leads
(
LeadID VARCHAR(64),
CreateUser VARCHAR(32),
CreateDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FirstName VARCHAR(32),
AccountID INT
);
CREATE TABLE dbo.Accounts
(
AccountID INT IDENTITY(1,1),
name VARCHAR(32) /* , ... other columns ... */
);
CREATE TABLE dbo.Temp(name VARCHAR(32));
INSERT dbo.Temp SELECT 'foo'
UNION SELECT 'bar';
Run Code Online (Sandbox Code Playgroud)
查询:
INSERT dbo.Accounts
(
name
)
OUTPUT
'Q' + cast(floor(999997 * RAND(convert(varbinary, newid()))) as varchar(20)),
'U6UJ9000S',
CURRENT_TIMESTAMP,
inserted.name,
inserted.AccountID
INTO dbo.Leads
SELECT name
FROM dbo.Temp;
Run Code Online (Sandbox Code Playgroud)
校验:
SELECT * FROM dbo.Accounts;
SELECT * FROM dbo.Leads;
Run Code Online (Sandbox Code Playgroud)
清理:
USE tempdb;
GO
DROP TABLE dbo.Temp, dbo.Accounts, dbo.Leads;
Run Code Online (Sandbox Code Playgroud)
在 Aaron 使用可组合 DML 的实践中,您可能最终会遇到的问题是,实际上您可能会定义一个 FK 来约束Leads(AccountId)有效值,在这种情况下您将遇到错误。
OUTPUT INTO 子句的目标表“dbo.Leads”不能位于(主键、外键)关系的任一侧。找到参考约束“FK_foo”。
为了避免这个问题,您可以使用
INSERT INTO dbo.Leads
EXEC('
INSERT INTO dbo.Accounts
OUTPUT
''Q'' + cast(floor(999997 * RAND(convert(varbinary, newid()))) as varchar(20)),
''U6UJ9000S'',
CURRENT_TIMESTAMP,
inserted.name,
inserted.AccountID
SELECT name
FROM dbo.Temp;
')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |