【发布时间】:2019-10-29 03:57:50
【问题描述】:
我正在尝试在 sp_executesql 中执行一些 SQL。
这是生成的 SQL:
exec sp_executesql
N'declare @RC int
EXECUTE @RC = [dbo].[sp_StoredProcedureName]
@parameterName
select @RC',
N'@parameterName nvarchar(4000)',
@parameterName=N'TEST'
这是从生成的 SQL 调用的存储过程:
ALTER PROCEDURE [dbo].[sp_StoredProcedureName] (
@parameterName varchar(4000)
)
with execute as owner
as
DECLARE @returnValue int
BEGIN TRANSACTION
INSERT INTO [dbo].[TableName]
(parameterName)
VALUES
(@parameterName)
set @returnValue = IDENT_CURRENT('TableName')
COMMIT
SELECT @returnValue
GO
由于某种原因,parameterName 从未设置。
在 SP 执行后尝试从 TableName 中进行选择时,ParameterName 为 NULL。
我正在使用 MS SQL。 SQL 由 ADO.NET 生成。
【问题讨论】:
-
不要将
sp_前缀用于存储过程名称。这是为系统保留的,使用它有一个real impact。 -
SELECT @returnValue返回结果集,而不是返回值。这个存储过程返回了一个单列单行的结果集
标签: sql tsql stored-procedures parameters sp-executesql