sp_executesql 将列设置为空
sp_executesql sets a column to null
我正在尝试在 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 select 时,ParameterName 为 NULL。
我正在使用 MS SQL。 SQL 是由 ADO.NET 生成的。
您的存储过程没有 returning 任何东西,因此 return 值为 NULL
。
一般来说,您应该只使用存储过程中的 return 值作为状态,而不是 return 实际数据。
实际 return 值应通过 output
参数 return 编辑。
此外,我强烈建议为此目的使用 OUTPUT
子句:
ALTER PROCEDURE [dbo].[sp_StoredProcedureName] (
@parameterName varchar(4000),
@returnValue int OUTPUT
)
with execute as owner
as
BEGIN
DECLARE @ids TABLE (id int);
INSERT INTO [dbo].[TableName] (parameterName)
OUTPUT id INTO @ids
VALUES (@parameterName);
SELECT TOP (1) @returnValue = id -- only 1 is expected anyway
FROM @ids;
END;
你可以这样称呼它:
declare @RC int;
declare @parameterName nvarchar(4000);
set @parameterName = N'TEST';
exec [dbo].[sp_StoredProcedureName] @parameterName, @rc int OUTPUT;
不需要动态 SQL。
我正在尝试在 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 select 时,ParameterName 为 NULL。
我正在使用 MS SQL。 SQL 是由 ADO.NET 生成的。
您的存储过程没有 returning 任何东西,因此 return 值为 NULL
。
一般来说,您应该只使用存储过程中的 return 值作为状态,而不是 return 实际数据。
实际 return 值应通过 output
参数 return 编辑。
此外,我强烈建议为此目的使用 OUTPUT
子句:
ALTER PROCEDURE [dbo].[sp_StoredProcedureName] (
@parameterName varchar(4000),
@returnValue int OUTPUT
)
with execute as owner
as
BEGIN
DECLARE @ids TABLE (id int);
INSERT INTO [dbo].[TableName] (parameterName)
OUTPUT id INTO @ids
VALUES (@parameterName);
SELECT TOP (1) @returnValue = id -- only 1 is expected anyway
FROM @ids;
END;
你可以这样称呼它:
declare @RC int;
declare @parameterName nvarchar(4000);
set @parameterName = N'TEST';
exec [dbo].[sp_StoredProcedureName] @parameterName, @rc int OUTPUT;
不需要动态 SQL。