• Можно ли устроиться C# программистом без специального образования?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Поддержу мнение что главное здесь знания и умения. У нас в отделе из 7 человек программистов 1 с незаконченным образованием программиста, 2 физика, 1 учитель, 2 менеджера и 1 металлург.
    Насчет перехода в магистратуру - смотрите на свой уровень. Если считаете, что сможете работать и в армию не заберут, то ищите работу - любая работа лучше учебы. А если знаний недостаточно, то стоит и в магистратуру на программиста. Всё таки хорошая выпускная работа поможет повысить уровень
    Ответ написан
    Комментировать
  • Выбрать первую и последнюю запись группы?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Не работал с PostgreSQL, но чисто на знании MS SQL могу предложить такой вариант
    SELECT ticket_number, some_id 
    FROM (
    SELECT ticket_number, some_id,
     rank() OVER (PARTITION BY ticket_number ORDER BY some_id DESC) RnkDESK,
     rank() OVER (PARTITION BY ticket_number ORDER BY some_id ASC) RnkASC
    FROM table ) x
    WHERE X.RnkDESK = 1 OR X.RnkASC = 1
    Ответ написан
    1 комментарий
  • Почему mssql выдает ошибку?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    DELETE e
    FROM #employees e
    INNER JOIN (
    	SELECT id
    		,RANK() OVER (PARTITION BY pass_num ORDER BY ID) RNK
    	FROM #employees
    	) X ON X.id = e.id
    WHERE x.RNK > 1
    Ответ написан
    Комментировать
  • Как правильно создать процедуру в Ms Sql?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    В своём ответе вы уже написали как правильно использовать процедуру.

    Если вам нужно вызывать по типу "dbo.SUMOFNUMBERS(5,6)". Используйте функцию.
    CREATE FUNCTION SUMOFNUMBERS 
    (
    	@FirstNumber INT,
    	@SecondNumber INT
    )
    RETURNS int
    AS
    BEGIN
    	-- Declare the return variable here
    	DECLARE @Answer int
    
    	-- Add the T-SQL statements to compute the return value here
    	SET @Answer = @FirstNumber + @SecondNumber;
    
    	-- Return the result of the function
    	RETURN @Answer
    END

    Используем: select dbo.SUMOFNUMBERS(5,6)

    Но если душа просит процедуру, могу предложить такой вариант:
    CREATE PROCEDURE SUMOFNUMBERS
      @FirstNumber INT,
      @SecondNumber INT,
    AS
    BEGIN
      SET @Answer = @FirstNumber + @SecondNumber;
      RETURN @Answer;
    END
    
    
    
    EXEC     @Answer =  SUMOFNUMBERS 5, 6
    Ответ написан
    1 комментарий
  • Как при помощи триггеров удалить записи в связанных таблицах в ms sql server?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Вот любим мы всякие извращения...
    Вы, про каскадное удаление слышали?
    Пример:
    ALTER TABLE [dbo].[OrderGoods]  WITH CHECK ADD  CONSTRAINT [FK_OrderGoods_OrderHeader] FOREIGN KEY([OrderHeaderGUID])
    REFERENCES [dbo].[OrderHeader] ([GUID])
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[OrderGoods] CHECK CONSTRAINT [FK_OrderGoods_OrderHeader]
    GO


    В коде нужно обратить внимание на ON DELETE CASCADE

    То есть при удалении заголовка, удалятся и данные тушки.
    Если совсем начинающий:
    Правый клик - отношения.
    И дальше как на картинке.
    019719c935be42fab97234421085cf15.png

    И не советую использовать триггеры - они сложно отлаживаются и если вдруг в нем будет ошибка вы просто потеряете часть данных при работе с таблицей.
    Ответ написан
    Комментировать
  • Как переписать SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Если вы хотите от запроса скорости, то избавляйтесь от "вложенных" запросов. Вот это:
    EXISTS (select 1 FROM oc_product_attribute_id p2a0 WHERE p2a0.product_id=p2a.product_id AND p2a0.text_id = 67)

    На каждую строку системе еще и доп запрос делать приходится

    Убирайте лишние join-ны.
    К примеру у вас есть
    LEFT JOIN oc_manufacturer m ON(m.manufacturer_id=p.manufacturer_id)

    А теперь найдите где вы к M в выборке данных общаетесь.

    Если вы выводите данные attribute_id, text
    то зачем вам в подзапросе еще куча полей понадобилась?
    SELECT DISTINCT p.product_id, p2a.attribute_id, p2a.text, p.price as realprice


    WHERE 1
    Я не знаток MySQL но я не понимаю зачем вам это???

    Еще видим условие:
    WHERE p2a.attribute_id IS NOT NULL

    Если p2a.attribute_id обязателен, то стоит написать INNER JOIN к таблице и не мучать себя лишними и бесполезными условиями.
    Ответ написан
  • Как создать фильтрацию в привязанной коллекции в WPF?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Могу предложить решение, которое сам найдя на просторах сети начал использовать и остался доволен.
    1. Заводим коллекцию, которая будет у нас источником
    public ObservableCollection<Person>  FilteredCollection
            {
                get
                {
       return  new ObservableCollection<Person>(PersonCollection.Where(i => FilteredCheck(i)));
                }
            }

    2.
    public bool FilteredCheck(DemandHead item)
            {
                bool Accept=true;
    // организовываем проверку как вашей душе удобно
    }
    
    // И дальше при изменении фильтра оповещаем View об изменении данных
            public bool IsFilterEnabled
            {
                get
                {
                    return _IsFilterEnabled;
                }
    
                set
                {
                    _IsFilterEnabled = value;
                    base.OnPropertyChanged("IsFilterEnabled");
                    base.OnPropertyChanged("FilteredCollection");
    
                }
            }
    Ответ написан
    Комментировать
  • Как настроить получение дополнительных свойств при использовании "своего" контрола?

    k1lex
    @k1lex Автор вопроса
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    На часть вопроса я всё таки нашел ответ самостоятельно.
    StringFormat не подхватывался, потому что при создании DependencyProperty у свойства "Value" использовался тип object. А StringFormat используется только для типа String. В виду того, что этот компонент нужен мне только для чтения, я поменял typeof(object) на typeof(string) и всё стало работать как нужно.
    Нормальным решением это конечно не назовешь. Но как говорил один герой в старом и добром мультфильме: "И так сойдет"
    Более подробно об этом написано на stackoverflow

    Насчет isReadOnly - завел для компонента еще одно свойство, аналогично первым двум (value и key). Работает.
    Ответ написан
    Комментировать
  • Как получить значения времени в Select from values?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Это для дат, переделать ее в вид нужный вам совсем не трудно.

    CREATE FUNCTION [dbo].[GetDateRangeShort] (@StartDate datetime, @EndDate datetime)
    RETURNS @Res TABLE (Date datetime) AS
    BEGIN
    		;WITH MyEmp (Date, Level)
    		AS(
    			SELECT @StartDate, 1
    			UNION ALL
    			SELECT DATEADD(dd, 1, Date), Level + 1
    			FROM MyEmp
    			WHERE (Date < @EndDate)
    		)
    		INSERT INTO @Res (Date) SELECT Date FROM MyEmp OPTION (MAXRECURSION 0);
    
    	RETURN
    END
    Ответ написан
    Комментировать
  • Как оптимизировать MSSql запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Буду честен. Ваш запрос не то что понять, его прочитать сложно.

    1. Поделите запрос на части и используйте времянки.
    2. Необязательно помещать каждый JOIN в подзапрос. Сделайте вида:
    SELECT  
    FROM TABLE
    inner join  TABLE2 ON ...
    inner join  TABLE3 ON ...

    3. Зачем писать условие в конце, когда можно сделать это прямо в JOUN-е
    SELECT *  FROM
     [OTD_db].[dbo].[DocumentsA] As [CurStatID]  
     INNER JOIN [OTD_db].[dbo].[Status] AS [Vv1] ON [Vv1].[StatusID] = [CurStatID].[CurrentStatusID] and [Vv1].[Name] Like 'Шаблон'

    4. Если данных в таблице будет много и запрос будет работать долго, то после указания таблицы или ее псевдонима допишите WITH (NOLOCK). Это снимет блокировку с таблицы на время работы запроса.
    5. Старайтесь не использовать вложенные запросы. типа where ПОЛЕ in (select from TABLE). Это сильно утяжеляет запрос.
    Ответ написан
  • Как реализовать блокировки в базе данных MSSQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Может многие меня не поддержат. Но у меня стояла задача разблокировать редактирование, при этом оставив просмотр для остальных. Оставлять одну только проверку версии казалось мало, а реализовывать через транзацию побоялся: неизвестно как будет себя вести изоляция, если ею раньше не пользовался.
    Реализация была через три дополнительных поля и пару процедур. Три на самом деле избыточно. Хватило бы и два. В общем этакий велосипед.
    Поля в заголовке:
    • Идентификатор пользователя UserEditGUID uniqueidentifier
    • Дата когда пользователь начал редактировать BeginEdit datetime
    • Не особо нужное поле isEdit bit


    И собственно процедура блокировки:
    ALTER PROCEDURE [dbo].[LockUnLockOrder]
    	@HeadGUID uniqueidentifier, @UserGUID  uniqueidentifier, @Lock bit
    	
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    	
    	if @HeadGUID is null or @UserGUID is null or @Lock is null 
    	begin
    	raiserror('Процедура LockUnLockOrder: Неинициализированный параметр',16,1)
    	return -1
    	end
    if V_ORDER.dbo.CheckEditStatus(@HeadGUID,@UserGUID) = 1
    begin
    	if 	@Lock = 1			
    	UPDATE [V_ORDER].[dbo].[OrderHeader]
    	SET isEdit = 1
    		,BeginEdit = getdate()
    		,UserEdit = @UserGUID
    	WHERE GUID = @HeadGUID
    	else 
    	if 	@Lock = 0			
    	UPDATE [V_ORDER].[dbo].[OrderHeader]
    	SET isEdit = 0
    		,BeginEdit = null
    		,UserEdit = null 
    	WHERE GUID = @HeadGUID
    	return 1
    end
    else raiserror('Невозможно изменить статус заказа',16,1)
    end


    И функция проверки возможности редактирования. Если пользователь открыл час назад, и не закрыл, то разрешение на редактирование выдается.
    -- =============================================
    -- Author:		k1lex
    -- Create date: 20160818
    -- Description:	функция возвращает разрешение редактирования заказа. 1 - можно редактировать. 0 - нельзя
    -- =============================================
    ALTER FUNCTION [dbo].[CheckEditStatus]
    (
    	-- Add the parameters for the function here
    	@HeadGUID uniqueidentifier, @UserGUID  uniqueidentifier
    )
    RETURNS bit
    AS
    BEGIN
    DECLARE @bit BIT
    
    IF (
    		SELECT COUNT(*)
    		FROM [V_ORDER].[dbo].[OrderHeader] O WITH (NOLOCK)
    		WHERE O.GUID = @HeadGUID
    			AND (ISNULL(O.IsReadOnly, 0) = 1 OR (O.userEdit != @UserGUID AND O.IsEdit = 1 AND DATEDIFF(HOUR, BeginEdit, GETDATE()) < 1)	
    			and [Status]=1
    			)
    		) = 0
    	SET @bit = 1
    ELSE
    	SET @bit = 0
    
    RETURN @bit
    END


    И поддержу Петр , что нужна проверка даты последнего изменения. На тот случай, если кто-то откроет, и вспомнит через три часа что открыл и отредактирует уже отредактированное.
    Ответ написан
    1 комментарий
  • Как увеличить производительность СУБД? Возможно ли хранить БД в оперативной памяти?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Индексы. И, пожалуй, самое важное - правильно написанные запросы в базу данных.
    Ответ написан
    Комментировать
  • C# Как найти блок текста в файле и заменить несколько повторяющихся строк?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Сформируйте регулярные выражения
    А дальше воспользуйтесь простой заменой найденного на нужное вам
    Ответ написан
    Комментировать
  • Как сделать в MSSQL поиск дубликатов в одной из колонок, при условии совпадения по другой колонке и отсутствия дубликатов в третьей?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    select 
    t1.id ,  t1.project_id ,  t1.sum_1 ,  t1.sum_2
    from table t1
    inner join 
    ( select project_id , COUNT(sum_1) ac CT from  table group by project_id ) t2 ON t1.project_id=t2.project_id  and t2.CT>1
    inner join 
    ( select project_id , COUNT(sum_2) ac CT from  table group by project_id ) t3 ON t1.project_id=t3.project_id  and t3.CT=1
    Ответ написан
    Комментировать
  • WHERE в SELECT SQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    SELECT [Поле группировки], sum(что сложить) FROM `table`  
     WHERE <условие>
     group by [Поле группировки]


    или

    SELECT [Поле группировки], sum(что сложить) FROM `table`  
     group by [Поле группировки]
    having [условие]


    Запросы работают примерно одинаково. Только в первом мы сначала накладываем условие на таблицу, а потом группируем. А во втором сначала получаем данные и накладываем условие.
    Ответ написан
    Комментировать
  • Как остановить count (sql запрос) после того как найдет 1 запись?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    А зачем вам выбирать количество если вы и так выбираете только 1 ???
    Выбирайте 1 ID , а дальше уже по ситуации.
    Ответ написан
  • Как выбрать из БД участки, у которых увеличилась площадь?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    IF OBJECT_ID('tempdb..#testtable') IS NOT NULL	DROP TABLE #testtable
    
    create table #testtable (number nvarchar(255), spac money, dateR date)
    insert into #testtable
    (number, spac, dateR)
    values
    (1,10,'20140505'),
    (1,11,'20141212'),
    (2,50,'20160505'),
    (2,40,'20160508')
    
    IF OBJECT_ID('tempdb..#testtableRNK') IS NOT NULL	DROP TABLE #testtableRNK
    
    select * ,
    rank() over (partition by Number order by dateR desc) as RNK
    into #testtableRNK
    from #testtable
    
    select * from #testtableRNK  r1
    inner join #testtableRNK  r2 ON r1.number= r2.number and r2.RNK=(r1.RNK+1)  and r1.RNK=1 and r2.spac< r1.spac
    Ответ написан
    Комментировать
  • SQL запрос, найти разницу в 2 столбцах?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    SELECT id2
    FROM table t1
    left join table t2 ON t1.id2=t2.id1
    where t2.id1 is null

    А вообще сохраните картинку себе на память
    2ee4f7db62d3481e9df4698c2af7a97d.jpg
    Ответ написан
    Комментировать