TSQL语法错误
我正在编写一个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
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的表中选择*)