2016-03-03 2 views
0

у меня есть SP, который INSERT INTO TBL_DOMAIN из TBL_STAGING, но сначала я хочу проверить таблицу TBL_STAGING, чтобы убедиться, что таблица не пуста, прежде чем я усечь таблицу TBL_DOMAIN, если таблица TBL_STAGING получила более одной записи, то продолжить таблицу обрезания TBL_DOMAIN, затем запустите сообщение INSERT, ELSE, скажем, что таблица TBL_STAGING является ПУСТОЙ и выходит из SP. Моя цель - убедиться, что таблица TBL_DOMAIN все еще имеет данные, даже старые. Я очень новый SQL, пожалуйста, помогите.Запись Графа в хранимых процедурах

CREATE PROCEDURE [dbo].[SP_INSERT_ALL_DOMAIN] 
WITH EXECUTE AS CALLER 
AS 
BEGIN  

BEGIN TRANSACTION NT_ALL_DOMAIN 
    INSERT INTO TBL_DOMAIN 
     (DOMAIN_NAME, 
     DISTINGUISHED_NAME, 
     EMAIL_ADDR_I) 
    SELECT DOMAIN_NAME, 
     DISTINGUISHED_NAME, 
     EMAIL_ADDR_I 
    FROM TBL_STAGING 

ответ

1

Прежде всего, необходимо проверить, если TBL_STAGING имеет данные:

IF EXISTS (SELECT TOP 1 1 FROM TBL_STAGING) 
BEGIN 
    BEGIN TRANSACTION NT_ALL_DOMAIN 
    INSERT INTO TBL_DOMAIN 
     (DOMAIN_NAME, 
     DISTINGUISHED_NAME, 
     EMAIL_ADDR_I) 
    SELECT DOMAIN_NAME, 
     DISTINGUISHED_NAME, 
     EMAIL_ADDR_I 
    FROM TBL_STAGING 
    COMMIT 
END 
ELSE 
BEGIN 
RETURN 'no data on table' 
END 
+0

Благодаря gonferr, могли бы вы объяснить эту линию ВЫБРАТЬ TOP 1 1 ОТ TBL_STAGING. Что делать, если таблица является обязательной? Мне нужно создать сообщение о том, что таблица TBL_STAGING пуста. – jp2631

+1

вам просто нужно проверить, есть ли у таблицы данные, поэтому этот «ТОП 1 1» - это самый быстрый способ сделать это. SQL просто выбирает одну строку и не заботится о данных столбцов этой строки. Вы можете завершить это с помощью ... ELSE RETURN «Нет данных на столе», или вы можете выбросить RAISERROR – gonferr

+2

Фактически, часть 'top 1' является избыточной при проверке' exist'. –

Смежные вопросы