Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL Server在变量中使用Select查询创建Insert_Sql_Sql Server - Fatal编程技术网

如何使用SQL Server在变量中使用Select查询创建Insert

如何使用SQL Server在变量中使用Select查询创建Insert,sql,sql-server,Sql,Sql Server,如何使用SQL Server在变量中创建带有select查询的insert 例如: DECLARE @sqlCommand nvarchar(MAX) DECLARE @odbname varchar(30) DECLARE @m VARCHAR(20) DECLARE @id VARCHAR(20) DECLARE @br VARCHAR(30) DECLARE @ndbname VARCHAR(30) SET @ndbname='databasename' SET @id = 2 SET

如何使用SQL Server在变量中创建带有select查询的insert

例如:

DECLARE @sqlCommand nvarchar(MAX)
DECLARE @odbname varchar(30)
DECLARE @m VARCHAR(20)
DECLARE @id VARCHAR(20)
DECLARE @br VARCHAR(30)
DECLARE @ndbname VARCHAR(30)

SET @ndbname='databasename'
SET @id = 2

SET @odbname = 'olddatabasename'
SET @br = 2

SET @m = 9

DECLARE @insert VARCHAR(MAX)
SET @insert = 'INSERT INTO'+ @ndbname+'.[pm]([pmId],[pmCode],[pmName])'  

EXEC (@insert)

SET @sqlCommand = 'SELECT @id AS spID,[spCode],[spName] `enter code here`FROM' + @0dbname+'.[sp] where spbID = @br and spID = @m'

EXECUTE sp_executesql @sqlCommand, N'@br nvarchar(75),@m nvarchar(75),@id VARCHAR(20)',@br = @br,@m=@m,@id=@id

实际上,我需要在insert query ie中执行select查询,将选定数据插入到另一个数据库表中

有很多缺陷:

SET @insert='INSERT INTO'+ @ndbname+'.[pm]([pmId],[pmCode],[pmName])'  
SET @sqlCommand = @insert + ' ' +'SELECT @id AS spID,[spCode],[spName] `enter code here`FROM' + @0dbname+'.[sp] where spbID = @br and spID = @m'
EXECUTE sp_executesql @sqlCommand, N'@br nvarchar(75),@m nvarchar(75),@id VARCHAR(20)',@br = @br,@m=@m,@id=@id
  • 您尝试单独执行插入
  • 如果声明dbName,则必须指定架构(是否为“dbo”?)
  • 你在释放空间
如果你换成这个

SET @insert='INSERT INTO'+ @ndbname+'.[pm]([pmId],[pmCode],[pmName])'  
SET @sqlCommand = @insert + ' SELECT @id AS spID,[spCode],[spName] `enter code here`FROM' + @odbname+'.[sp] where spbID = @br and spID = @m'
PRINT @sqlCommand
您将得到以下结果:

INSERT INTOdatabasename.[pm]([pmId],[pmCode],[pmName]) SELECT @id AS spID,[spCode],[spName] `enter code here`FROMolddatabasename.[sp] where spbID = @br and spID = @m
但应该是这样的

INSERT INTO databasename.[schema].[pm]([pmId],[pmCode],[pmName]) 
SELECT @id,[spCode],[spName] 
FROM olddatabasename.[schema].[sp] 
where spbID = @br and spID = @m
一般提示:

  • 如果不需要动态SQL,请不要使用它
  • 如果构建动态sql,不要尝试执行它。与其打印它,不如将它复制到查询窗口,并分析它是否正常

语法是:插入到表\u name 1中,从表\u name 2中选择列\u name。在这种情况下,表1的结构和表2中的选定列结构应该是相同的。抱歉,我无法获取。请解释更多…您可以从查询窗口访问这两个数据库吗?然后您可以使用INsert into TODBname.SchemaName.TableName从FROMDBname.SchemaName.TableName中选择列列表这真的工作正常吗?缺少空格,变量名“@0dbname”无效。。。架构名称?只是一个空间,在这种情况下它不是很重要。你有没有检查过这个@user2728653似乎很高兴,但我无法想象这会起作用。。。nvm和快乐编码!我认为用户2728653理解插入和选择必须是一个接一个的,以便插入他需要的内容@Sankar Raj后来给出了一个很好的解释,并且只需要发布一个示例。@IlyaOdintsov,您的“示例”生成了错误的代码。至少错误的三部分限定名(
databasename.schemaname.tablename
)是一个主要缺陷。。。但我们不必那么挑剔。OP很快乐,我们也应该如此:-)