MSSQL - Проверка что в строке только цифры
Пример проверки что в строке толко цифры:
SELECT * FROM my_table WHERE user_name NOT LIKE '%[^0-9]%';
Пример проверки что в строке толко цифры:
SELECT * FROM my_table WHERE user_name NOT LIKE '%[^0-9]%';
Пример применения SPLIT_STRING для всех строк в наборе одним скриптом.
-- Создаем набор данных для примера
declare @tbl table(path varchar(max));
insert into @tbl
select 'root_home_user'
union
select 'lib_var_simple'
union
select 'var_games_user'
--Теперь выбираем для каждой записи второе значение в строке с учетом разделителя "_"
select
path,
s.value -- Здесь будет результат SPLIT_STRING для каждого поля
from @tbl
CROSS APPLY
STRING_SPLIT(path, '_') AS s -- Замените '_' на ваш разделитель
WHERE
s.value = (SELECT value FROM STRING_SPLIT(path, '_')
ORDER BY (SELECT NULL) OFFSET 1 ROW FETCH NEXT 1 ROW ONLY)
-- Для выбора какой из параметров по порядку взять, меняем OFFSET - 0 - первый и далее.
Пример возвращения параметра при выполнении динамически созданного запроса.
Будем использовать для этого sp_executesql
DECLARE @eventCount as int = 0; -- Наш возвращаемый параметр
DECLARE @sqlString AS NVARCHAR(500); -- Динамически сгенерированный SQL скрипт
DECLARE @parmDefinition AS NVARCHAR(500); -- Набор параметров для обмена
DECLARE @actualDate as date = '2000-08-24';
DECLARE @tableName as varchar(max) = 'sys.tables';
SET @parmDefinition = N'@outputCount int OUTPUT,@DateSend date';
SET @sqlString = N'select @outputCount = count(1) from '+@tableName+' where create_date>@dateSend;';
EXEC sp_executesql
@stmt = @sqlString, -- Динамически созданный запрос
@params = @parmDefinition, -- Описание передаваемых параметров (как в запрос так и обратно)
@dateSend = @actualDate, -- Принимаемый параметр
@outputCount = @eventCount OUTPUT; -- Возвращаемый параметр
SELECT @eventCount AS CountEvents;
Добавление описания к полю в таблице
EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = N'Описание поля',
@level0type = N'SCHEMA', @level0name = N'CRM', -- Вместо 'dbo' ставим название своей схемы если отличается
@level1type = N'TABLE', @level1name = N'TableName', -- Наименование таблицы 'TableName', для поля которой добавляем описание
@level2type = N'COLUMN', @level2name = N'ColumnName'; -- Название поля 'ColumnName', для которого добавляем описание
Примеры получения текста запроса по идентификатору сессии
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = (YourSessionID)
SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
GO
SELECT TEXT
FROM sys.dm_exec_connections
CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle)
WHERE session_id = (yoursessionID)
GO
Пример выборки полей из временной таблицы со всеми параметрами.
Идентично можно выбирать и для обычных таблиц.
Select c.column_id
,c.name [column_name]
,y.name [data_type]
,c.max_length
,c.precision
,c.scale
,c.is_identity
,c.is_nullable
,c.collation_name
,', ['+c.name +'] ['+y.name+']'
+IIF (y.name in ('varchar','char'),'('+cast(IIF(c.max_length=0,'max',c.max_length) as varchar(5))+')','')
+IIF (y.name in ('nvarchar'),'('+cast(IIF(c.max_length=0,'max',c.max_length/2) as varchar(5))+')','')
+IIF (y.name in ('decimal','numeric'),'('+cast(c.precision as varchar(3))+', '+cast(c.scale as varchar(3))+')','')
+IIF (not y.collation_name is null,' COLLATE '+y.collation_name,'')
+IIF (y.is_nullable = 1,' NULL','')
as [ready_column]
From tempdb.sys.columns c
Inner join sys.types y ON y.system_type_id = c.system_type_id
WHERE c.object_id = Object_id('tempdb..#tmp')
and y.name!='sysname'
order by c.column_id
#tmp - ваша временная таблица
--generate disable деактивация
SELECT 'exec msdb..sp_update_job @job_name = '''+NAME+''', @enabled = 0' FROM msdb..sysjobs
--generate enable активация
SELECT 'exec msdb..sp_update_job @job_name = '''+NAME+''', @enabled = 1' FROM msdb..sysjobs
exec msdb.dbo.sysmail_stop_sp
exec msdb.dbo.sysmail_delete_mailitems_sp @sent_status = 'unsent'
exec msdb.dbo.sysmail_delete_mailitems_sp @sent_status = 'retrying'
exec msdb.dbo.sysmail_delete_mailitems_sp @sent_status = 'failed'
Конвертируем DATE или DATETIME в INT (формата YYYYMMDD)
declare @dt datetime
set @dt = '09-22-2007 15:07:38.850'
select cast(convert(char(8),@dt,112) as int)