sp_msforeachtable недоступен: получить имя таблицы + min (значение) + max (значение) - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть база данных Azure SQL. В большинстве таблиц есть поле с именем Meta_inserted (datetime). я хотел бы просмотреть все таблицы, и если есть поле с именем Meta_insert, я хотел бы видеть: Table_name, min (meta_inserted) как первое, max (meta_inserted) как последнее.

Я привык к решению этого используя sp_msforeachtable, но это недоступно в Azure SQL. И что теперь?

1 Ответ

0 голосов
/ 25 февраля 2020

sp_MSforeachtable - это недокументированная хранимая процедура в базе данных SQL Master. По-видимому, это не было перенесено на Azure SQL.

Так что вам нужно создать хранимую процедуру вручную в Azure SQL master db.

Пожалуйста, укажите: Развертывание базы данных на Azure SQL завершается неудачно, sp_MSforeachtable не найден

Вот полный код недокументированной хранимой процедуры sp_MSforeachtable:

USE [master]
GO
/****** Object:  StoredProcedure [sys].[sp_MSforeachtable]    Script Date: 8/18/2017 8:47:44 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER proc [sys].[sp_MSforeachtable]
    @command1 nvarchar(2000), @replacechar nchar(1) = N'?', @command2 nvarchar(2000) = null,
   @command3 nvarchar(2000) = null, @whereand nvarchar(2000) = null,
    @precommand nvarchar(2000) = null, @postcommand nvarchar(2000) = null
as
    /* This proc returns one or more rows for each table (optionally, matching 
@where), with each table defaulting to its own result set */
    /* @precommand and @postcommand may be used to force a single result set via 
a temp table. */

    /* Preprocessor won't replace within quotes so have to use str(). */
    declare @mscat nvarchar(12)
    select @mscat = ltrim(str(convert(int, 0x0002)))

    if (@precommand is not null)
        exec(@precommand)

    /* Create the select */
   exec(N'declare hCForEachTable cursor global for select ''['' + 
REPLACE(schema_name(syso.schema_id), N'']'', N'']]'') + '']'' + ''.'' + ''['' + 
REPLACE(object_name(o.id), N'']'', N'']]'') + '']'' from dbo.sysobjects o join 
sys.all_objects syso on o.id = syso.object_id '
         + N' where OBJECTPROPERTY(o.id, N''IsUserTable'') = 1 ' + N' and o.category & ' + @mscat + N' = 0 '
         + @whereand)
    declare @retval int
    select @retval = @@error
    if (@retval = 0)
        exec @retval = sys.sp_MSforeach_worker @command1, @replacechar, @command2, @command3, 0

    if (@retval = 0 and @postcommand is not null)
        exec(@postcommand)

    return @retval

Ссылка: Введение в sp_MSforeachtable; итеративный запуск команд по всем таблицам в базе данных

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...