неправильная хранимая процедура в профилировщике - PullRequest
1 голос
/ 13 сентября 2011

Я запускаю программу с источником данных источника и видом сетки. Мой метод обновления выглядит так, как будто он проходит через программу правильно. Но когда он попадает в БД, возникает какая-то синтаксическая ошибка.

Вот хранимый процесс

USE [starch]
GO
/****** Object:  StoredProcedure [dbo].[Starch_Update_KPCodes]    Script Date:       09/13/2011 11:02:1 ******/
SET ANSI_NULLS ON
 GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[Stored_proc_name]
(
@bookcode as varchar(15),
@PC as varchar(10),
@EReader as varchar(10),
@Tablet as varchar(10),
@Mobile as varchar(10)
)
AS
Begin
Update storedproc
SET 
    Valid_Ans_Nbr = @PC 
where 
    kp_Column=82 and BookCode = @bookcode 
Update 
    Valid_Answers
SET
    Valid_Ans_Nbr = @EReader 
where 
    kp_Column=83 and BookCode = @bookcode


Update
    Valid_Answers
SET 
    Valid_Ans_Nbr = @Tablet 
where 
    kp_Column=84 and BookCode = @bookcode

Update
    alid_Answers
Set
    Valid_Ans_Nbr = @Mobile 
where 
    kp_Column=85 and BookCode = @bookcode

END

А затем вот что передается в базу данных в профилировщике SQL

exec sp_executesql N'Starch_Update_KPCodes',
                   N'@bookcode nvarchar(8),
                   @PC nvarchar(1),
                   @EReader nvarchar(1),
                   @Tablet nvarchar(1),
                   @Mobile nvarchar(1)',
                   @bookcode=N'A0027232',
                   @PC=N'1',
                   @EReader=N'1',
                   @Tablet=N'1',
                   @Mobile=N'1' 

Часть того, что я думаю, происходит из-за того, что я отбросил и заново создал хранимую процедуру несколько раз. И эта строка

N'@bookcode nvarchar(8),@PC nvarchar(1),@EReader nvarchar(1),
     @Tablet nvarchar(1),@Mobile nvarchar(1)'

, вероятно, относится к некоторой кешированной версии хранимого процесса.

Я проверил событие обновления моего objectdatasource, чтобы убедиться, что оно имеет правильные параметры.

Как мне избавиться от лишнего текста, который передается в хранимую процедуру?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Предположительно, вам нужно установить тип команды для хранимой процедуры.

Ваш существующий код просто попытается выполнить пустой оператор Starch_Update_KPCodes, а передаваемые вами параметры не используются нигде в этом операторе.

Чтобы сделать это через sp_executesql, оператор должен быть

exec sp_executesql N'EXEC Starch_Update_KPCodes 
                             @bookcode=@bookcode, 
                             @PC=@PC, 
                             @EReader=@EReader, 
                             @Tablet=@Tablet, 
                             @Mobile=@Mobile',
                   N'@bookcode nvarchar(8),
                   @PC nvarchar(1),
                   @EReader nvarchar(1),
                   @Tablet nvarchar(1),
                   @Mobile nvarchar(1)',
                   @bookcode=N'A0027232',
                   @PC=N'1',
                   @EReader=N'1',
                   @Tablet=N'1',
                   @Mobile=N'1' 

Что было бы немного глупо по сравнению с простым вызовом хранимого процесса напрямую!

2 голосов
/ 13 сентября 2011

Не уверен, что понимаю твою проблему, но ....

Эта часть определяет параметры для sp_executesql.

               N'@bookcode nvarchar(8),
               @PC nvarchar(1),
               @EReader nvarchar(1),
               @Tablet nvarchar(1),
               @Mobile nvarchar(1)',

И это присваивает значения параметрам.

               @bookcode=N'A0027232',
               @PC=N'1',
               @EReader=N'1',
               @Tablet=N'1',
               @Mobile=N'1'    

Насколько я вижу, там нет дополнительного текста .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...