SQL Server - остановка или выполнение повреждения сценария SQL

Вы пытались сначала использовать автофокус, вот способ сделать это:

private lateinit var cameraLocal: Camera
//...

      /**
     * Setting the right parameters in the camera
     */
    private fun applyCameraSettings(quality: Int) {
        val params = getCameraParams()
        params.setPictureSize(getDefaultWidth(), getDefaultHeight())
        params.pictureFormat = PixelFormat.JPEG
        params.jpegQuality = quality
        params.focusMode = if (params.focusMode == Camera.Parameters.FOCUS_MODE_AUTO) Camera.Parameters.FOCUS_MODE_AUTO else params.focusMode
        cameraLocal.parameters = params
    }

 /**
     * get the camera parameters
     */
    private fun getCameraParams(): Camera.Parameters {
        return cameraLocal.parameters
    }
310
задан Blorgbeard 2 December 2010 в 04:52
поделиться

12 ответов

Моя последняя работа, мы мигрируем из Windows в OpenSuse 11.

Я провожу день в процессе установки (только 4 часа, чтобы появилось первый экран настройки оракула), но теперь пользователи подтверждают мне, что время всех запросов теперь лучше, поэтому я рекомендую его.

сам вызов RAISEERROR () завершится ошибкой , и скрипт продолжит выполнение .
  • При вызове с помощью sqlcmd.exe будет сообщен код завершения 2745.
  • Ссылка: http: // www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334

    The noexec метод

    Другой метод, который работает с операторами GO, установлен noexec в . Это приводит к тому, что остальная часть сценария будет пропущена. Это не прерывает соединение, но вам нужно снова отключить noexec перед выполнением каких-либо команд.

    Пример:

    print 'hi'
    go
    
    print 'Fatal error, script will not continue!'
    set noexec on
    
    print 'ho'
    go
    
    -- last line of the script
    set noexec off -- Turn execution back on; only needed in SSMS, so as to be able 
                   -- to run this script again in the same session.
    
    354
    ответ дан 23 November 2019 в 01:12
    поделиться

    Просто используйте ВОЗВРАТ (он будет работать как внутри, так и снаружи хранимой процедуры).

    176
    ответ дан Gordon Bell 23 November 2019 в 01:12
    поделиться

    Я использую RETURN здесь все время, работы в сценарии или Stored Procedure

    Удостоверяются Вы ROLLBACK транзакция, если Вы будете в одном, то иначе RETURN сразу приведет к открытой незафиксированной транзакции

    3
    ответ дан jerryhung 23 November 2019 в 01:12
    поделиться

    Ни одна из этих работ с операторами 'GO'. В этом коде, независимо от того, равняется ли серьезность 10 или 11, Вы получаете заключительный оператор печати.

    Сценарий тестирования:

    -- =================================
    PRINT 'Start Test 1 - RAISERROR'
    
    IF 1 = 1 BEGIN
        RAISERROR('Error 1, level 11', 11, 1)
        RETURN
    END
    
    IF 1 = 1 BEGIN
        RAISERROR('Error 2, level 11', 11, 1)
        RETURN
    END
    GO
    
    PRINT 'Test 1 - After GO'
    GO
    
    -- =================================
    PRINT 'Start Test 2 - Try/Catch'
    
    BEGIN TRY
        SELECT (1 / 0) AS CauseError
    END TRY
    BEGIN CATCH
        SELECT ERROR_MESSAGE() AS ErrorMessage
        RAISERROR('Error in TRY, level 11', 11, 1)
        RETURN
    END CATCH
    GO
    
    PRINT 'Test 2 - After GO'
    GO
    

    Результаты:

    Start Test 1 - RAISERROR
    Msg 50000, Level 11, State 1, Line 5
    Error 1, level 11
    Test 1 - After GO
    Start Test 2 - Try/Catch
     CauseError
    -----------
    
    ErrorMessage
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Divide by zero error encountered.
    
    Msg 50000, Level 11, State 1, Line 10
    Error in TRY, level 11
    Test 2 - After GO
    

    единственный способ сделать эту работу состоит в том, чтобы записать сценарий без GO операторы. Иногда это легко. Иногда это довольно трудно. (Используйте что-то как IF @error <> 0 BEGIN ....)

    4
    ответ дан Cody Gray 23 November 2019 в 01:12
    поделиться

    можно использовать RAISERROR.

    4
    ответ дан Mladen Prajdic 23 November 2019 в 01:12
    поделиться

    Действительно ли это - хранимая процедура? Если так, я думаю, что Вы могли просто сделать Возврат, такой как "ПУСТОЙ УКАЗАТЕЛЬ Возврата";

    8
    ответ дан mtazva 23 November 2019 в 01:12
    поделиться

    Вы могли обернуть свой SQL-оператор в НЕКОТОРОЕ ВРЕМЯ цикл и использовать ПОВРЕЖДЕНИЕ в случае необходимости

    WHILE 1 = 1
    BEGIN
       -- Do work here
       -- If you need to stop execution then use a BREAK
    
    
        BREAK; --Make sure to have this break at the end to prevent infinite loop
    END
    
    12
    ответ дан Jon Erickson 23 November 2019 в 01:12
    поделиться

    Я не использовал бы SQL RAISERROR-, имеет операторы IF, которые могут использоваться с этой целью. Сделайте свою проверку и поиски и установите локальные переменные, затем используйте значение переменных в операторах IF для создания условного выражения вставок.

    Вы не должны были бы проверять переменный результат каждой валидации. Вы могли обычно делать это только с одной переменной флага, чтобы подтвердить, что все условия передали:

    declare @valid bit
    
    set @valid = 1
    
    if -- Condition(s)
    begin
      print 'Condition(s) failed.'
      set @valid = 0
    end
    
    -- Additional validation with similar structure
    
    -- Final check that validation passed
    if @valid = 1
    begin
      print 'Validation succeeded.'
    
      -- Do work
    end
    

    , Даже если Ваша проверка более сложна, необходимо только быть нужны несколько переменных флага для включения в последнюю проверку (проверки).

    22
    ответ дан fizzled 23 November 2019 в 01:12
    поделиться

    Я предложил бы, чтобы Вы обернули свой соответствующий блок кода в блок выгоды попытки. Можно тогда использовать событие Raiserror с серьезностью 11 для повреждения к блоку выгоды, если Вы желаете. Если Вы просто хотите к raiserrors, но продолжаете, выполнение в блоке попытки тогда используют более низкую серьезность.

    Имеют смысл?

    С наилучшими пожеланиями, John

    [Отредактированный для включения Ссылки BOL]

    http://msdn.microsoft.com/en-us/library/ms175976 (SQL.90) .aspx

    6
    ответ дан John Sansom 23 November 2019 в 01:12
    поделиться

    Спасибо за ответ!

    raiserror() хорошо работает, но Вы не должны забывать return оператор иначе сценарий продолжается без ошибки! (следовательно raiserror не является "throwerror" и конечно выполнением отката при необходимости!

    raiserror() хорошо сказать человеку, который выполняет сценарий, что что-то пошло не так, как надо.

    1
    ответ дан 23 November 2019 в 01:12
    поделиться

    Если вы можете использовать режим SQLCMD, то заклинание

    :on error exit
    

    (ВКЛЮЧАЯ двоеточие) заставит RAISERROR фактически остановить скрипт. Например,

    :on error exit
    
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SOMETABLE]') AND type in (N'U')) 
        RaisError ('This is not a Valid Instance Database', 15, 10)
    GO
    
    print 'Keep Working'
    

    выведет:

    Msg 50000, Level 15, State 10, Line 3
    This is not a Valid Instance Database
    ** An error was encountered during execution of batch. Exiting.
    

    , и пакет будет остановлен. Если режим SQLCMD не включен, вы получите ошибку синтаксического анализа двоеточия. К сожалению, это не совсем надежно, так как если скрипт запускается, не находясь в режиме SQLCMD, SQL Managment Studio проскакивает мимо даже ошибок времени синтаксического анализа! Тем не менее, если вы запускаете их из командной строки, это нормально.

    48
    ответ дан 23 November 2019 в 01:12
    поделиться

    Дальнейшее уточнение метода Sglasses, приведенные выше строки заставляют использовать режим SQLCMD и либо обрабатывают сценарий, если не используется режим SQLCMD, либо использует : при ошибке выход для выхода в любая ошибка
    CONTEXT_INFO используется для отслеживания состояния.

    SET CONTEXT_INFO  0x1 --Just to make sure everything's ok
    GO 
    --treminate the script on any error. (Requires SQLCMD mode)
    :on error exit 
    --If not in SQLCMD mode the above line will generate an error, so the next line won't hit
    SET CONTEXT_INFO 0x2
    GO
    --make sure to use SQLCMD mode ( :on error needs that)
    IF CONTEXT_INFO()<>0x2 
    BEGIN
        SELECT CONTEXT_INFO()
        SELECT 'This script must be run in SQLCMD mode! (To enable it go to (Management Studio) Query->SQLCMD mode)\nPlease abort the script!'
        RAISERROR('This script must be run in SQLCMD mode! (To enable it go to (Management Studio) Query->SQLCMD mode)\nPlease abort the script!',16,1) WITH NOWAIT 
        WAITFOR DELAY '02:00'; --wait for the user to read the message, and terminate the script manually
    END
    GO
    
    ----------------------------------------------------------------------------------
    ----THE ACTUAL SCRIPT BEGINS HERE-------------
    
    8
    ответ дан 23 November 2019 в 01:12
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: