SQL Server';s";sp_executesql";不识别参数

SQL Server';s";sp_executesql";不识别参数,sql,sql-server,sql-server-2008,tsql,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Tsql,Sql Server 2008 R2,我有以下代码: create procedure my_sp_name_here @param1 int, @param2 nvarchar(128) as begin ...<sql here>...; end declare @paramDef nvarchar(500) = N'@param1 int, @param2 nvarchar(128)'; execute sp_executesql my_sp_name_here, @paramDef, @

我有以下代码:

create procedure my_sp_name_here
    @param1 int,
    @param2 nvarchar(128)
as
begin
    ...<sql here>...;
end

declare @paramDef nvarchar(500) = N'@param1 int, @param2 nvarchar(128)';
execute sp_executesql my_sp_name_here, @paramDef, @param1=1, @param2=N'p2';
在此处创建过程my\u sp\u name\u
@参数1 int,
@param2 nvarchar(128)
像
开始
......;
终止
声明@paramDef nvarchar(500)=N'@param1int,@param2 nvarchar(128)';
在此处执行sp_executesql my_sp_name_,@paramDef,@param1=1,@param2=N'p2';
我一直收到一个错误:

过程或函数“my_sp_name_here”需要参数@param1, 没有提供

我尝试了几种不同的配置并进行了搜索,但没有找到答案。任何帮助都将不胜感激。

请写信

exec my_sp_name_here @param1=1, @param2=N'p2';
而不是

execute sp_executesql my_sp_name_here, @paramDef, @param1=1, @param2=N'p2';

而不是

execute sp_executesql my_sp_name_here, @paramDef, @param1=1, @param2=N'p2';
在T-SQL中,是一个内置函数,可以运行SQL语句或调用几乎任何类型的函数或过程。它不接受SQL语句的参数,只接受存储过程的参数

存储过程不支持带参数的SQL语句。
sp_executesql
的第一个参数是SQL语句。但您使用存储过程名称作为第一个参数:

execute sp_executesql my_sp_name_here, @paramDef, @param1=1, @param2=N'p2';
那不好!要使用sp_executesql调用存储过程,您可以:

exec sp_executesql 
    N'exec my_sp_name_here @param1, @param2', 
    N'@param1 int, @param2 nvarchar(128)',
    @param1 = 42,
    @param2 = 'Answer to The Ultimate Question of Life, the Universe, and Everything';
但是使用
exec
调用存储过程要容易得多:

exec my_sp_name_here 42, '6*7';
您不必向
exec
提供参数名,它将按顺序接受它们。

在t-SQL中,是一个内置函数,可以运行SQL语句或调用几乎任何类型的函数或过程。它不接受SQL语句的参数,只接受存储过程的参数

存储过程不支持带参数的SQL语句。
sp_executesql
的第一个参数是SQL语句。但您使用存储过程名称作为第一个参数:

execute sp_executesql my_sp_name_here, @paramDef, @param1=1, @param2=N'p2';
那不好!要使用sp_executesql调用存储过程,您可以:

exec sp_executesql 
    N'exec my_sp_name_here @param1, @param2', 
    N'@param1 int, @param2 nvarchar(128)',
    @param1 = 42,
    @param2 = 'Answer to The Ultimate Question of Life, the Universe, and Everything';
但是使用
exec
调用存储过程要容易得多:

exec my_sp_name_here 42, '6*7';

您不必向
exec
提供参数名称,它将按顺序接受它们。

您的代码很奇怪。您正在递归调用相同的过程吗?外部调用是否具有正确的参数?为什么要使用sp_executesql调用过程?你不能直接调用它吗?双重执行问题:使用exec或sp_executesql,而不是两者都使用。Gordon Linoff-该示例旨在指示过程是创建的,然后从外部范围调用它。我只是想显示方法签名。抱歉搞混了。您的代码很奇怪。您正在递归调用相同的过程吗?外部调用是否具有正确的参数?为什么要使用sp_executesql调用过程?你不能直接调用它吗?双重执行问题:使用exec或sp_executesql,而不是两者都使用。Gordon Linoff-该示例旨在指示过程是创建的,然后从外部范围调用它。我只是想显示方法签名。很抱歉给你带来了困惑。