我有一个 VALID sp_executesql
代码,由C#ADO.NET生成,但参数不会传递给存储过程(SQL Server问题)。
这是我在SQL Profiler中找到的:
declare @p3 StockSyncType
insert into @p3 values(3, 17594, 73471, 20, 5, 100, N'', N'', N'', N'')
insert into @p3 values(3, 17593, 73470, 20, 5, 100, N'', N'', N'', N'')
exec sp_executesql N'EXECUTE [dbo].[sp_SyncInventory] ',N'@Details [dbo].
[StockSyncType] READONLY',@Details=@p3
您可以在此处找到表格类型和存储过程:
CREATE TYPE [dbo].[StockSyncType] AS TABLE(
[OperationTypeId] [int] NOT NULL,
[Product_ID] [int] NOT NULL,
[ProductAttribute_ID] [int] NOT NULL,
[Location_ID] [int] NOT NULL,
[StockType_ID] [int] NOT NULL,
[Quantity] [decimal](18, 0) NOT NULL,
[RowOrIsle] [nvarchar](10) NULL,
[Bay] [nvarchar](10) NULL,
[Shelf] [nvarchar](10) NULL,
[Bin] [nvarchar](55) NULL
)
GO
CREATE PROCEDURE [dbo].[sp_SyncInventory]
@Details StockSyncType READONLY
AS
BEGIN
SELECT *
FROM @Details
END
请帮帮忙?!我不明白为什么没有运行sp_executesql
的错误,但是没有发送参数。
答案 0 :(得分:2)
感谢Alex K.这个问题确实存在于C#中,但我发现SQL并没有发出错误的信号。
正确的电话是(粗体是缺失部分):
exec sp_executesql N'EXECUTE [dbo]。[sp_SyncInventory] @Details ',N'@ Details [dbo]。[StockSyncType] READONLY',@ Details = @ p3
答案 1 :(得分:0)
你根本不需要动态sql。只需打电话给你的程序。
declare @p3 StockSyncType
insert into @p3 values(3,17594,73471,20,5,100,N'',N'',N'',N'')
insert into @p3 values(3,17593,73470,20,5,100,N'',N'',N'',N'')
EXECUTE [dbo].[sp_SyncInventory] @p3
我会提醒您使用sp_作为前缀不是一个好主意。我不喜欢任何前缀,因为它们往往只是噪音,使编码更加困难。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix