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-该示例旨在指示过程是创建的,然后从外部范围调用它。我只是想显示方法签名。很抱歉给你带来了困惑。