Результаты поиска
Как мне split строку, чтобы я мог получить доступ к элементу x?
Используя SQL сервер, как мне split строку, чтобы я мог получить доступ к элементу x?
Возьмите строку "Hello John Smith". Как я могу split строку пробелом и получить доступ к элементу с индексом 1, который должен возвращать "John"?
T-Sql формат даты в секундах с момента последней эпохи / форматирование для ввода sqlite
Я предполагаю, что это должно быть что-то вроде:
CONVERT(CHAR(24), lastModified, 101)
Однако я не уверен в правильном значении для третьего параметра.
Спасибо!
Ну, я пытаюсь написать сценарий для копирования моей базы данных сервера sql в файл sqlite, который загружается в приложение air, которое затем синхронизирует данные с другим файлом sqlite. У меня куча проблем с датами. Если я выбираю дату в air и пытаюсь вставить ее, это не удается, потому что она не в правильном формате... даже если это была действительная дата для начала. Я решил, что попробую поэкспериментировать с unix временем, так как это единственное, что работает до сих пор. Я рассматриваю возможность просто оставить их как varchar, потому что я все равно не сортирую по ним.
Как избежать использования курсоров в Sybase (T-SQL)?
Представьте себе сцену, вы обновляете какой-то устаревший код Sybase и натыкаетесь на курсор. Хранимая процедура создает результирующий набор в таблице #temporary, которая полностью готова к возвращению, за исключением того, что один из столбцов не очень удобочитаем, это буквенно-цифровой код.
Что нам нужно сделать, так это выяснить возможные различные значения этого кода, вызвать другую хранимую процедуру для перекрестной ссылки на эти дискретные значения, а затем обновить результирующий набор новыми расшифрованными значениями:
declare c_lookup_codes for
select distinct lookup_code
from #workinprogress
while(1=1)
begin
fetch c_lookup_codes into @lookup_code
if @@sqlstatus<>0
begin
break
end
exec proc_code_xref @lookup_code @xref_code OUTPUT
update #workinprogress
set xref = @xref_code
where lookup_code = @lookup_code
end
Итак, хотя это может вызвать у некоторых людей учащенное сердцебиение, это действительно работает. Мой вопрос в том, как лучше всего избежать такого рода вещей?
_NB: для целей этого примера вы также можете представить, что результирующий набор находится в области 500k строк и что существует 100 различных значений look_up_code и, наконец, что невозможно иметь таблицу со значениями внешней ссылки, так как логика в proc_code_xref слишком arcane._
Как вы справляетесь с ошибками транспортного уровня в SqlConnection?
Время от времени в высокообъемном приложении .NET вы можете видеть это исключение при попытке выполнить запрос:
System.Data.SqlClient.SqlException: ошибка транспортного уровня имеет произошел при отправке запроса на сервер.
Согласно моим исследованиям, это то, что "just happens" и не так много можно сделать, чтобы предотвратить это. Это не происходит в результате неправильного запроса и, как правило, не может быть продублировано. Он просто появляется, возможно, один раз в несколько дней в занятой системе OLTP, когда соединение TCP с базой данных по какой-то причине портится.
Я вынужден обнаружить эту ошибку, проанализировав сообщение об исключении, а затем повторить всю операцию с нуля, чтобы включить использование нового соединения. Все это не очень красиво.
У кого-нибудь есть альтернативные решения?
Какой самый простой способ с помощью T-SQL / MS-SQL добавить строку к существующим ячейкам таблицы?
У меня есть таблица с колонкой 'filename'. Недавно я выполнил вставку в эту колонку, но в спешке забыл добавить расширение файла ко всем введенным именам файлов. К счастью, все они являются изображениями ".jpg".
Как я могу легко обновить столбец 'filename' этих вставленных полей (предполагая, что я могу выбрать последние строки на основе известных значений идентификаторов), чтобы включить расширение '.jpg'?
Как удалить повторяющиеся строки?
Как лучше всего удалить повторяющиеся строки из довольно большой таблицы SQL Server (т. е. 300 000 + строк)?
Строки, конечно, не будут идеальными дубликатами из-за существования поля RowID identity.
MyTable
RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
Как сделать вставки в таблицу?
У меня есть представление, в котором есть список заданий с данными, такими как то, кому они назначены, и этап, на котором они находятся. Мне нужно написать хранимую процедуру, которая возвращает количество заданий, которые каждый человек имеет на каждом этапе.
До сих пор у меня есть это (упрощенный):
DECLARE @ResultTable table
(
StaffName nvarchar(100),
Stage1Count int,
Stage2Count int
)
INSERT INTO @ResultTable (StaffName, Stage1Count)
SELECT StaffName, COUNT(*) FROM ViewJob
WHERE InStage1 = 1
GROUP BY StaffName
INSERT INTO @ResultTable (StaffName, Stage2Count)
SELECT StaffName, COUNT(*) FROM ViewJob
WHERE InStage2 = 1
GROUP BY StaffName
Проблема в том, что строки не объединяются. Поэтому, если у сотрудника есть задания в stage1 и stage2, есть две строки в @ResultTable., что я действительно хотел бы сделать, это обновить строку, если она существует для сотрудника, и вставить новую строку, если она не существует.
Кто-нибудь знает, как это сделать, или может предложить другой подход? Я бы очень хотел избежать использования курсоров для итерации по списку пользователей (но это мой запасной вариант).
Я использую SQL Server 2005.
Edit: @Lee: к сожалению, InStage1 = 1 было упрощением. Это действительно больше похоже на то, где DateStarted-это не NULL, а DateFinished - это NULL.
Edit: @BCS: мне нравится идея сделать вставку всех сотрудников сначала, поэтому мне просто нужно делать обновление каждый раз. Но я изо всех сил пытаюсь получить эти утверждения UPDATE правильно.
Триггер без транзакции?
Можно ли создать триггер, который не будет в транзакции?
Я хочу обновить данные на связанном сервере с помощью триггера, но из-за проблем с брандмауэром мы не можем создать распределенную транзакцию между двумя серверами.
Какой хороший способ проверить, находятся ли две даты в один и тот же календарный день в TSQL?
Вот проблема, с которой я сталкиваюсь: у меня есть большой запрос, который должен сравнить даты в предложении where, чтобы увидеть, если две даты находятся в один и тот же день. Мое текущее решение, которое отстойно, состоит в том, чтобы отправить даты в UDF, чтобы преобразовать их в полночь того же дня, а затем проверить эти даты на равенство. Когда дело доходит до плана запроса, это катастрофа, как и почти все UDFs в предложениях joins или where. Это одно из немногих мест в моем приложении, где я не смог искоренить функции и дать оптимизатору запросов то, что он действительно может использовать для поиска лучшего индекса.
В этом случае слияние кода функции обратно в запрос кажется нецелесообразным.
Мне кажется, я упускаю здесь что-то простое.
Вот функция для справки.
if not exists (select * from dbo.sysobjects
where id = object_id(N'dbo.f_MakeDate') and
type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
exec('create function dbo.f_MakeDate() returns int as
begin declare @retval int return @retval end')
go
alter function dbo.f_MakeDate
(
@Day datetime,
@Hour int,
@Minute int
)
returns datetime
as
/*
Creates a datetime using the year-month-day portion of @Day, and the
@Hour and @Minute provided
*/
begin
declare @retval datetime
set @retval = cast(
cast(datepart(m, @Day) as varchar(2)) +
'/' +
cast(datepart(d, @Day) as varchar(2)) +
'/' +
cast(datepart(yyyy, @Day) as varchar(4)) +
' ' +
cast(@Hour as varchar(2)) +
':' +
cast(@Minute as varchar(2)) as datetime)
return @retval
end
go
Чтобы усложнить ситуацию, я подключаюсь к таблицам часовых поясов, чтобы проверить дату по местному времени, которое может отличаться для каждой строки:
where
dbo.f_MakeDate(dateadd(hh, tz.Offset +
case when ds.LocalTimeZone is not null
then 1 else 0 end, t.TheDateINeedToCheck), 0, 0) = @activityDateMidnight
[Редактировать]
Я включаю предложение @Todd's:
where datediff(day, dateadd(hh, tz.Offset +
case when ds.LocalTimeZone is not null
then 1 else 0 end, t.TheDateINeedToCheck), @ActivityDate) = 0
Мое неправильное представление о том, как работает datediff (один и тот же день года в последовательные годы дает 366, а не 0, как я ожидал), заставило меня потратить много усилий.
Но план запроса не изменился. Я думаю, что мне нужно вернуться к чертежной доске со всем этим.
SQL сервер: примеры строковых данных PIVOTing
Пытаюсь найти несколько простых примеров SQL Server PIVOT. Большинство примеров, которые я нашел, связаны с подсчетом или суммированием чисел. Я просто хочу pivot некоторые строковые данные. Например, у меня есть запрос, возвращающий следующее.
Action1 VIEW
Action1 EDIT
Action2 VIEW
Action3 VIEW
Action3 EDIT
Я хотел бы использовать PIVOT (если это вообще возможно), чтобы сделать результаты такими:
Action1 VIEW EDIT
Action2 VIEW NULL
Action3 VIEW EDIT
Возможно ли это вообще с помощью функции PIVOT?
Создать базу данных из другой базы данных?
Существует ли автоматический способ в SQL Server 2005 создать базу данных из нескольких таблиц в другой базе данных? Мне нужно работать над проектом, и мне нужно только несколько таблиц, чтобы запустить его локально, и я не хочу делать резервную копию 50 gig DB.
UPDATE
Я попробовал Tasks - > Export Data в Management studio, и хотя он создал новую суббазу данных с таблицами, которые я хотел, он не копировал никакие метаданные таблицы, ограничения ie...no PK/FK и никаких идентификационных данных (даже с проверкой сохранения идентичности).
Очевидно, что они нужны мне для работы, поэтому я открыт для других предложений. Я попробую этот инструмент публикации баз данных.
У меня нет доступных служб интеграции, и два сервера SQL не могут напрямую подключаться друг к другу, поэтому они отключены.
Обновление обновления
Инструмент публикации базы данных работал, SQL, сгенерированный им, был немного глючным, поэтому требовалось небольшое ручное редактирование (пытался ссылаться на несуществующие триггеры), но как только я это сделал, я был готов идти.
Есть ли способ сделать переменную TSQL постоянной?
Есть ли способ сделать переменную TSQL постоянной?
Получить последний элемент в таблице-SQL
У меня есть таблица истории в SQL Server, которая в основном отслеживает элемент через процесс. Элемент имеет несколько фиксированных полей, которые не изменяются на протяжении всего процесса, но имеет несколько других полей, включая статус и идентификатор, которые увеличиваются по мере увеличения шагов процесса.
В основном я хочу получить последний шаг для каждого элемента, заданного ссылкой на пакет. Так что если я сделаю
Select * from HistoryTable where BatchRef = @BatchRef
Он вернет все шаги для всех элементов в пакете-например
Id Status BatchRef ItemCount 1 1 Batch001 100 1 2 Batch001 110 2 1 Batch001 60 2 2 Batch001 100
Но чего я действительно хочу, так это:
Id Status BatchRef ItemCount 1 2 Batch001 110 2 2 Batch001 100
Edit: Appologies - кажется, не удается получить теги TABLE для работы с Markdown - последовал за справкой к письму и выглядит нормально в предварительном просмотре