Как отправить WhereClause в EXEC в SQL Server - PullRequest
0 голосов
/ 23 марта 2012
ALTER PROCEDURE [dbo].[GetTimeSheetsAttendance]

@WhereClause varchar
AS

EXEC  ('Select vwEmployeeList.ID,vwEmployeeList.Code,
        tbGNClient.FName + '' '' +  tbGNClient.MName + '' ''+ tbGNClient.LName as Name,
        EmployeeAttendanceTb.EmpAttID, EmployeeAttendanceTb.EmpAttSetupID,
        EmployeeAttendanceTb.GNClientID, EmployeeAttendanceTb.SheetID,
        EmployeeAttendanceTb.Date, EmployeeAttendanceTb.TimeIn,
        EmployeeAttendanceTb.TimeOut, EmployeeAttendanceTb.HasExtraTime,
        EmployeeAttendanceTb.ExtraTime, EmployeeAttendanceTb.TotalOfHours,
        EmployeeAttendanceTb.TotalOfCost, EmployeeAttendanceTb.Description,
        vwEmployeeList.Department,
        EmployeeAttendSetup.NoMaximumUnits,
        EmployeeAttendSetup.NoMinimumUnits
        From EmployeeAttendanceTb
        LEFT JOIN vwEmployeeList on EmployeeAttendanceTb.GNClientID = vwEmployeeList.ID
        LEFT JOIN tbGNClient on vwEmployeeList.ID = tbGNClient.GNClientID
        LEFT JOIN EmployeeAttendSetup on EmployeeAttendanceTb.GNClientID = EmployeeAttendSetup.EmpID And EmployeeAttendanceTb.EmpAttSetupID  = EmployeeAttendSetup.AttndUnitsID
        ' + ' ' + @WhereClause)

Примечание: @WhereClause отправляется из приложения C # в качестве параметров.

DBType=nvarchar.. 
@WhereClause.Value= "Where EmployeeAttendanceTb.GNClientID=17"

Исключение:

При попытке доступа к данным возникают некоторые проблемы. Блок приложения, пожалуйста, проверьте следующие сообщения об ошибках: Неверно синтаксис около 'W'.

1 Ответ

5 голосов
/ 23 марта 2012

Проблема в первую очередь связана с тем, что вы не объявили длину своего параметра @WhereClause, а лишь указали, что это varchar. Это означает, что он получает длину по умолчанию , которая равна 1 в объявлениях переменных, и, следовательно, в EXEC фактически передается только 'W' вашего предложения WHERE.

Когда n не указано в определении данных или объявлении переменной оператор, длина по умолчанию равна 1.

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