TSQL语法错误

TSQL语法错误,tsql,Tsql,我正在编写一个tsql过程,将一个数据库中的所有视图重新创建到另一个数据库中。当我查看代码时,虽然语法对我来说是正确的,但我收到了错误“不正确的语法接近+”。谁能告诉我这个问题出了什么问题 USE [SOURCEDB] BEGIN DECLARE @SQL NVARCHAR(MAX) DECLARE CUR_V CURSOR FOR SELECT sc.text FROM sys.views av JOIN sys.syscomments sc O

我正在编写一个tsql过程,将一个数据库中的所有视图重新创建到另一个数据库中。当我查看代码时,虽然语法对我来说是正确的,但我收到了错误“不正确的语法接近+”。谁能告诉我这个问题出了什么问题

USE [SOURCEDB]   
BEGIN  
DECLARE @SQL NVARCHAR(MAX)  
DECLARE CUR_V CURSOR FOR  
SELECT sc.text     
FROM sys.views av          
JOIN sys.syscomments sc ON sc.id = av.object_id  
OPEN CUR_V  
FETCH NEXT FROM CUR_V INTO @SQL  
WHILE @@FETCH_STATUS = 0  
BEGIN    
EXEC sp_executesql N'USE [DESTINATIONDB] EXEC sp_executesql ' + @SQL + ''       
FETCH NEXT FROM CUR_V INTO @SQL  END  CLOSE CUR_V  DEALLOCATE CUR_V  END

提前感谢

您不能在与
sp_executesql

declare @sql nvarchar(1000)
select @sql = N'USE [DESTINATIONDB] EXEC sp_executesql ' + @SQL + '' 
exec sp_executesql @sql
或者你的意思可能是

select @sql = N'USE [DESTINATIONDB] EXEC sp_executesql N''' + @SQL + '''' 

尝试在一个变量中写入所有句子:
set@sql=N'..
然后将其用作
sp_executesql
参数。我最初尝试过,但由于它是一个视图,因此不起作用,因为view station必须是批处理中的第一条语句。这就是嵌套executesql语句的原因。在此新变量中声明一个新的var@total\u sql并设置所有命令:
set@total\u sql=N'Use…++@sql++'
然后执行
EXEC sp\u executesql@total\u sql
。试试这个,谢谢你,丹。也许我误解了你的意思。我想你是说做下面的事情。declare&SQL NVARCHAR(max)SET&SQL='使用[SOURCEDB]创建视图xyz作为选择1作为x'exec sp_executesql&SQL这将返回错误“'CREATE VIEW'必须是查询批处理中的第一条语句”。由于注释issuesok,已更改为(&E),请尝试完全限定数据库路径,以包含
使用
命令:create view database.owner.view…,谢谢你。我尝试过这个建议,但是SQL Server仍然说+的语法不正确。表中的值是否也包含+?我不这么认为。创建视图的值来自系统表(sys.VIEWS和sys.syscomments),因此这些表中包含的任何内容都是可能的。大多数视图都非常简单(即从dtdeleted为NULL的表中选择*)