动态SQL Server嵌套EXEC
我试图在一个nvarchar中执行一个存储过程,我让他们执行。 我收到以下错误,动态SQL Server嵌套EXEC,sql,sql-server,Sql,Sql Server,我试图在一个nvarchar中执行一个存储过程,我让他们执行。 我收到以下错误,Msg 2812,级别16,状态62,过程Map.AdminServiceLoad,第127行[批处理开始行2] 找不到存储过程“”。 我引用的存储过程存在,我已重新启动MSSQL,我是否无法使用EXEC执行 DECLARE @NewStoredProc nvarchar(max) = ' create procedure [Map].[Load'+@TableName+'] as begin
Msg 2812,级别16,状态62,过程Map.AdminServiceLoad,第127行[批处理开始行2]
找不到存储过程“”。
我引用的存储过程存在,我已重新启动MSSQL,我是否无法使用EXEC执行
DECLARE @NewStoredProc nvarchar(max) = '
create procedure [Map].[Load'+@TableName+']
as
begin
DECLARE @MapTable nvarchar(100) = [Map].['+@TableName+']
DECALRE @MapDevlTable nvarchar(100) = [MapDevl].['+@TableName+']
DECLARE @ShapesAreValid bit
DECLARE @PointsAreValid bit
EXEC @ShapesAreValid = Map.AdminServiceValidateShapes @TableName = @MapDevlTable
EXEC @PointsAreValid = Map.AdminServiceValidatePoints @TableName = @MapDevlTable
if(@ShapesAreValid = 1 and @PointsAreValid = 1)
begin
INSERT INTO [Map].['+@TableName+'] SELECT('+@ColsToLoad+') FROM [MapDevl].['+@TableName+']
end
end
'
EXEC @NewStoredProc
return 1
它必须是EXEC(@cmd)而不是EXEC@cmd
如果没有括号,它将查找与@cmd中的字符串同名的存储过程。它需要是EXEC(@cmd)而不是EXEC@cmd
如果没有括号,它将查找与@cmd中的字符串同名的存储过程。当
@NewStoredProc
为NULL
时,您将准确地得到此错误。在尝试执行动态字符串之前,请始终打印动态字符串。请注意,这不会执行存储过程,而是创建一个存储过程。要执行新创建的存储过程,您需要使用另一个动态的EXEC
或(更简单的)sp_executesql
。或者,你知道,根本不创建过程,直接执行这些语句。你的动态SQL语句不是在执行存储过程,而是在创建存储过程。这里有一个return语句,这让我觉得你在创建一个充满动态SQL的存储过程,它创建了一个存储过程。这几乎总是一种设计不理想的迹象。当@NewStoredProc
为NULL
时,您将准确地得到此错误。在尝试执行动态字符串之前,请始终打印动态字符串。请注意,这不会执行存储过程,而是创建一个存储过程。要执行新创建的存储过程,您需要使用另一个动态的EXEC
或(更简单的)sp_executesql
。或者,你知道,根本不创建过程,直接执行这些语句。你的动态SQL语句不是在执行存储过程,而是在创建存储过程。这里有一个return语句,这让我觉得你在创建一个充满动态SQL的存储过程,它创建了一个存储过程。这几乎总是一个设计不够理想的标志。