У меня есть хранимая процедура в SQL Server 2008. Я объявляю параметр @query
через DECLARE @query NVARCHAR(MAX)
, затем устанавливаю @query
в соответствии с типом отправляемых данных, а затем использую exec [sys].[sp_executesql] @query
для выполнения хранимая процедура.
Проблема в том, что я использую DataSet в Visual Studio, которая связана с этой хранимой процедурой (используется в отчете).
Когда я выполняю свою хранимую процедуру таким образом (с @query
), тогда набор данных не берет данные столбца для показа. Я должен был создать хранимую процедуру таким образом (с @query
), потому что мне нужно, чтобы предложение where отличалось в зависимости от данных, отправляемых в.
Мой код:
CREATE PROCEDURE [dbo].[p_Test_GetFooData]
@pName VARCHAR(250) = '',
@pID INT = NULL
AS
BEGIN
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT FOO.FirstName, FOO.LastName
FROM Test.FooOne AS FOO'
IF ( @pName = '--- SELECT ---' )
BEGIN
SET @query = @query + ' WHERE FOO.ID = '
+ CONVERT(VARCHAR(50), @pID) + ''
END
ELSE
BEGIN
SET @query = @query + ' WHERE FOO.ID = '
+ CONVERT(VARCHAR(50), @pID) + ' AND
PP.FirstName + LIKE ''%' + @pName
+ '%'' '
END
EXEC [sys].[sp_executesql] @query
END
Я проверил запрос, и он возвращает правильные данные при запуске хранимой процедуры. Когда я не использую SET @query = 'SELECT STATEMENT' EXEC @query
, тогда набор данных работает как надо.
Любая помощь будет оценена.