SQL查询 - 使用SELECT WHERE INSERT INTO什么都不做

时间:2013-10-26 18:04:48

标签: sql sql-server sql-server-2008 tsql

我有2个表已经创建了相同的模式。我想从table1插入行 - >具有Age(列)约束的table2不是重复的。查询执行但没有插入任何内容。

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

非常感谢任何帮助!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]模式替换它,整个语句将给你语法错误。希望这会有所帮助!!!

答案 2 :(得分: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])