使用动态SQL插入语句和不存在的位置

时间:2013-10-22 07:19:13

标签: sql-server-2008 tsql dynamic sql-insert not-exists

我在SQL Server 2008中的存储过程中有以下内容

declare @sql as varchar(max)
set @sql='select col1,col2 from remote server'

我想做的是

insert into mytable(col1,col2)
exec(@sql)
Where not exists
(select * from mytable where col1=?,col2=?)

这不起作用。对此有什么解决方案吗?我的动态sql将是这样的,因为这是使用openquery从某个远程服务器获取数据。所以我没有解决方案,但在插入时呼叫exec(@sql)。也不知道如何替换“?”在Where NOT Exists子句中,因为数据来自动态SQL。

1 个答案:

答案 0 :(得分:0)

我测试了这个。有用。不要忘记授予权限。

declare @sql as nvarchar(max)
set @sql='
insert [linkedserver].[database].[schema].[tablename] (col1, col2)
select @a, @b
where not exists (select 1 from [linkedserver].[database].[schema].[tablename]  
where col1 = @a and col2 = @b)
select * from [linkedserver].[database].[schema].[tablename]  
'

EXEC sp_executesql @sql, N'@a int, @b int', 1,4