Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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嵌套EXEC_Sql_Sql Server - Fatal编程技术网

动态SQL Server嵌套EXEC

动态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

我试图在一个nvarchar中执行一个存储过程,我让他们执行。 我收到以下错误,
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的存储过程,它创建了一个存储过程。这几乎总是一个设计不够理想的标志。