tyaps_asp, posts by tag: sql - LiveJournal (original) (raw)

For XML и 2034 символа [Jul. 7th, 2011|03:54 pm]Программирование в ASP.Net
[Tags**|.net, sql]Наблюдение.Если забираешь с помощью cmd.ExecuteScalar();результат запроса типаselect id, name from t1for xml auto, root('root')* This source code was highlighted with Source Code Highlighter.то получаешь только первые 2034 символа.Что тут можно сделать?( Read more...Collapse )**
link 2 comments|post comment
COALESCE [May. 4th, 2011|10:30 am]Программирование в ASP.Net
[**Tags**|sql]Интересная SQL функция COALESCE. Раньше как-то не встречал.COALESCE(expression1, expression2, expressionN) работает какCASE WHEN (expression1 IS NOT NULL) THEN expression1 ... WHEN (expressionN IS NOT NULL) THEN expressionN ELSE NULLEND- продвинутый isnull()
link 2 comments|post comment
SQL удалить время из datetime [Mar. 24th, 2011|04:09 pm]Программирование в ASP.Net
[**Tags**|sql]select dateadd(day, datediff(day, 0, GetDate()), 0) - дает чисто дату.-ооо, какая штука!Взято отсюда: http://www.flenov.info/blog.php?catid=879
link post comment
Скажем нет decimal-у без precision [Dec. 15th, 2010|03:28 pm]Программирование в ASP.Net
[**Tags**|sql]Не забываем, что для переменных sql-типа decimal надо обязательно указывать точность этих переменныхесли вы сделаете такdeclare @a decimalset @a=15.28то вы получите только 15 без каких-либо ошибок или предупреждений.Поэтому declare @a decimal(10,2)set @a=15.28а то пишут тут всякие)))UPD. А ещеdeclare @a nvarcharset @a='Example'выдает просто 'E'
link 2 comments|post comment
sql получить вставленные строки с identity-полем немедленно [Nov. 26th, 2010|03:16 pm]Программирование в ASP.Net
[**Tags**|sql]Этот sql-код говорит сам за себя.Есть таблицаCREATE TABLE t1( [id] [int] IDENTITY(1,1) NOT NULL, [name] [nvarchar](50) NULL) goИ, оказывается, можно делать так:declare @res table (some_id int, some_name nvarchar(50))insert into t1(name) output inserted.id, inserted.name into @resvalues('aa')select * from @resПрикольно, а?А еще более прикольно, когда вставляется результат подзапросаinsert into t1(name) output inserted.id, inserted.name into @res select some_field from...
link post comment
Когда nvarchar(max) вмещает только nvarchar(4000) [Nov. 10th, 2010|10:13 am]Программирование в ASP.Net
[**Tags**|sql]Допустим, готовим мы длинную строку, чтобы запустить ее в sp_executesql.declare @str nvarchar(max)set @str = 'select * from ....' + 'where... ' + 'order by...'И если стока получается больше, чем 4000 символов, то она урезается (без возникновения ошибки) до 4000 символов, несмотря на, казалось бы, nvarchar(max). В чем суть?Строка, полученная при конкатенации маленьких сток 'select', 'where' - она получалась при конкатенации nvarchar(4000) = nvarchar(4000) + nvarchar(4000) и поэтому обрезалась, а уж потом вносиласть в nvarchar(max).Чтобы решить такую проблему, всего лишь надо сделать такdeclare @str nvarchar(max)@str = ''set @str = @str + 'select * from ....' + 'where... ' + 'order by...'тогда мы получим ситуацию nvarchar(max) = nvarchar(max) + nvarchar(4000) при каждой конкатенации и все будет хорошо.
link 1 comment|post comment
ms sql подзапрос с использованием WITH [Nov. 10th, 2010|10:03 am]Программирование в ASP.Net
[**Tags**|sql]Давно уже есть в ms sql 2005 возможность использования with для более читабельной организации подзапросов, но если кто пролетел мимо и не заметил, то вот заметкаВместоselect * from t1join(select a.id, a.name from a join b ... ) as t2on t1.id=t2.idможно писать такwith t2(id, name) as (select a.id, a.name from a join b ... )select * from t1 join t2 on t1.id=t2.idВажный момент. Чтобы не было проблем, если ваша процедура начинается с каких-то других действий, нежели такого запроса, то после последнего действия (перед with) лучше поставить точку с запятой ;А то sql server и сам попросит об этом
link 2 comments|post comment
Умышленные блокировки в SQL Server with (tablockx) [Sep. 24th, 2010|05:08 pm]Программирование в ASP.Net
[**Tags**|sql, sql server]Понадобилось решить задачу типаselect @max_id=max(id)+1 from t1insert into @t1 (id) values (@max_id)Поле id при этом не является автоинкрементом. Я прикинул, что шанс того, что 2 пользователя одновременно не выполнят эту инструкцию, и забил, но как обычно это бывает - все случилось. В день один-два раза я получал ошибку Duplicate Key.Решается все тем, что я при получении max_id делаю умышленную эксклюзивную блокировку на таблицуbegin transelect @max_id=max(id)+1 from t1 with (tablockx)insert into @t1 (id) values (@max_id)commit tranМожно играться с видами блокировок - на таблицу, на строку и пр.Теперь, второму из одновременных участников придется подождать немножко, перед тем как получить @max_id, и он получит верный результат.Логи показывают, что ошибка Duplicate Key не повторялась больше.
link post comment
select из хранимой процедуры [Nov. 2nd, 2009|12:19 pm]Программирование в ASP.Net
[**Tags**|sql]Как давным давно что-то вбилось в голову, что результат выполнения хранимой процедуры нельзя использовать (и следует писать табличную функцию), так там и сидело.На самом деле все просто:create table #t(name nvarchar(50) ,comments nvarchar(500))insert into #t exec p_my1_sel @param=1
link post comment
Полезные скриптики для вычисления дней в датах [Oct. 14th, 2009|05:17 pm]Программирование в ASP.Net
[**Tags**|sql]DECLARE @Date datetimeSET @Date = '2000/02/1'SELECT DATEADD(dd,-(DATEPART(dw, @Date) - 1),@Date) AS 'First day of the week'SELECT DATEADD(dd,-(DATEPART(dw, @Date) - 7),@Date) AS 'Last day of the week' SELECT DAY(DATEADD(d, -DAY(DATEADD(m,1,@Date)),DATEADD(m,1,@Date))) AS 'Last day of the month'
link post comment
navigation
[ viewing | most recent entries ] [ go earlier ]