-2

我已经创建了 2 个具有相同架构的表。我想插入来自 table1 -> table2 的行,其中 Age(column) 的约束不重复。查询执行,但没有插入任何内容。

CREATE TABLE #Global (dbName varchar(100) NULL)
INSERT INTO #Global VALUES ('db1')

DECLARE @temp nvarchar(1000)
SELECT @temp = dbName from #Global

DECLARE @sql nvarchar(max)
SELECT @sql = 'INSERT INTO [dbo].[Person] ([age], [name])
              SELECT [age], [name]
              FROM [' + @temp + ']..[Person] 
              WHERE [Person].[age] <> [' + @temp + ']..[Person].[age]'
exec sp_executesql @sql

任何帮助将非常感激!

4

3 回答 3

2

您的 where 子句将排除所有行。

你应该尝试这样的事情:

DECLARE @sql nvarchar(max)
SELECT @sql = 'INSERT INTO [dbo].[Person] ([id], [age], [name])
              SELECT min([id]) as id, [age], min([name]) as name
              FROM [' + @temp + ']..[Person] 
              group by age'
exec sp_executesql @sql
于 2013-10-26T18:11:08.213 回答
1

写为:

CREATE TABLE #Global (dbName varchar(100) NULL)
INSERT INTO #Global VALUES ('db1')

DECLARE @temp nvarchar(1000)
SELECT @temp = dbName from #Global

DECLARE @sql nvarchar(max)
SELECT @sql = 'INSERT INTO [dbo].[Person] ([age], [name])
              SELECT [age], [name]
              FROM [' + @temp + '].[Person] 
              WHERE [' + @temp + '].[Person].[age] NOT IN (SELECT [age] from [dbo].[Person])'

exec sp_executesql @sql

为什么你的 where 子句不起作用?架构范围解析总是从用户的默认架构开始,如果引用的对象不是范围限定的,则恢复到 dbo 架构。

在 where 子句中,您没有为第一个表指定模式名称。因此将源表本身作为 DB1。只需尝试用 [dbo] 模式替换它,整个语句就会给你语法错误。希望这可以帮助!!!

于 2013-10-27T16:57:44.950 回答
0

试试这个作为选择语句:

INSERT INTO [dbo].[Person] ([age], [name])
SELECT [age], [name]
FROM [' + @temp + ']..[Person] 
WHERE [' + @temp + ']..[Person].[age] 
not in (select distinct age from [dbo].[Person])
于 2013-10-27T09:04:43.410 回答