如何使用SQL Server在变量中使用Select查询创建Insert
如何使用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
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,不要尝试执行它。与其打印它,不如将它复制到查询窗口,并分析它是否正常
databasename.schemaname.tablename
)是一个主要缺陷。。。但我们不必那么挑剔。OP很快乐,我们也应该如此:-)