在我的SSIS数据流中,我试图使用OLE DB COMMAND
在我的表中执行插入并返回新生成的GUID
Id值。
根据我的findings,这就是我在SqlCommand
标签上提供Component Properties
属性
EXECUTE sp_executesql
N'DECLARE @generated_keys TABLE([Id] UNIQUEIDENTIFIER);
INSERT INTO myTable ([FirstName], [LastName])
OUTPUT Inserted.Id INTO @generated_keys
VALUES (?,?);
SELECT TOP 1 @ident = Id FROM @generated_keys',
N'@ident UNIQUEIDENTIFIER OUTPUT',
@ident = ? OUTPUT
当我添加此内容并点击Refresh
标签上的Component Properties
按钮时,我看到以下错误。
SSIS Error Code DTS_OLEDBERROR. An OLE DB error has occurred.
Error Code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0"
Hresult: 0x80004005 Description: "Syntax error, permission violation, or other nonspecific
error".
我正在使用连接到Sql Server 2014数据库的Visual Studio 2015的SSIS加载项。我还检查并确保数据库用户具有正确的权限。
答案 0 :(得分:0)
不知道参数定义的语法,但您错过了@ident
变量声明,并试图将名称或值或参数放入sp_executesql
调用,这是不允许的。在下面的示例中,@ident
是从动态查询中声明并获得的。
GO
create table testtable
(
id UNIQUEIDENTIFIER not null default newid(),
[FirstName] varchar(100),
[LastName] varchar(100)
)
GO
declare @ident uniqueidentifier
EXECUTE sp_executesql
N'DECLARE @generated_keys TABLE([Id] UNIQUEIDENTIFIER);
INSERT INTO testtable([FirstName], [LastName])
OUTPUT Inserted.Id INTO @generated_keys
VALUES (''test'', ''test'');
SELECT TOP 1 @ident = Id FROM @generated_keys',
N'@ident UNIQUEIDENTIFIER OUTPUT',
@ident OUTPUT
select @ident
GO
drop table testtable
GO
可能你需要最后一行:
set ? = @ident
或者用sp_executesql
替换?
的最后一个参数:
EXECUTE sp_executesql N'...sql...',
N'@ident UNIQUEIDENTIFIER OUTPUT',
? OUTPUT
在这种情况下,我假设您不需要declare
部分。