У меня есть 4 таблицы, из которых я извлекаю записи. Первые три таблицы требуют внутреннего соединения с общими строками, но с 4-й таблицей мне нужно оставить внешнее соединение, потому что я должен сохранить уже взятые строки из первых трех таблиц.C# и SQL Server 2005
Теперь проблема в том, что я хочу, чтобы левое соединение с четвертой таблицей, но оно должно выбирать только записи, имеющие дату = текущую дату. Я передаю текущую дату из C# при вызове моей хранимой процедуры. Но дело в том, что SQL Server дает нулевые записи.
Вот запрос ::
alter procedure
(@currentdate varchar(50))
select distinct
table1.name, table2.class,table3.stream
from
table1
inner join
table 2 on table1.id = table2.id
inner join
table3 on table3.id=table2.id
left outer join
table 4 on table 4.id = table3.id and table4.date = @currentdate
я и левое внешнее соединение, потому что я хочу записи в том, как, где, как, используя, где положение фильтрует весь результат и просто дать мне одну запись.
Затем я также использовал литье с обеими датами в хранимой процедуре, но без положительного ответа.
От C# Я использую
var date = datetime.now.toshortdate();
CallStoredProcedure(date)
Пожалуйста, помогите мне об этом как можно скорее. Спасибо
Вы должны ** НЕ ** использовать 'VARCHAR (50)', как тип данных для даты! **НИКОГДА** ! Используйте соответствующие типы - например. 'DATETIME' –
См. Это сообщение в блоге Аарона Бертранна о датах неправильного обращения: [Плохие привычки: неправильные обращения/заданные вопросы] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/ bad-habitits-to-kick-mishandling-date-range-queries.aspx) - вы должны ** не ** хранить даты как строки - вы просто просите о проблемах таким образом. Используйте типы данных DATE или DATETIME! –