суть sql если постановка задачи - PullRequest
0 голосов
/ 18 апреля 2011

Работа на ms-сервере 2005. В моей хранимой процедуре мне нужно использовать оператор if, я уже пытаюсь написать, но у меня ничего не получается, Мой синтаксис ниже:

Create Procedure TestProcedure
@Type int 

as


SELECT * INTO #temp1 FROM (
if @Type =0
select * from dbo.Manifest

else
select * from dbo.DischargePort

) as b

После выполнения приведенного выше синтаксиса покажите мне сообщение об ошибке, Сообщение равно

Msg 156, Level 15, State 1, Procedure TestProcedure, Line 8
Incorrect syntax near the keyword 'if'.
Msg 170, Level 15, State 1, Procedure TestProcedure, Line 14
Line 14: Incorrect syntax near ')'.

Как решить проблему, заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

РЕДАКТИРОВАТЬ Хорошо, так что вы не можете фактически вставить в #temptable дважды, потому что компилятор не распознает, что он использует оператор if, ближайший обходной путь был следующим:

 IF @Type = 0
 BEGIN
     exec select * into #temp from dbo.Manifest
 END
 ELSE
 BEGIN
     select * into #temp from dbo.DischargePort
 END

ВЕРСИЯ 2

DECLARE @Type int = 0

IF @Type = 0     
exec ('select * into ##temp from dbo.Manifest')
ELSE 
exec ('select * into ##temp from dbo.DischargePort')

SELECT * FROM ##temp

А потом не забудьте бросить стол в конце

IF (SELECT object_id('TempDB..##temp')) IS NOT NULL
BEGIN    
    DROP TABLE ##temp
END

И тогда вы получите доступ к ## temp, как к обычной таблице. Помните, что если вы хотите добавить параметры в динамический sql, используйте sp_exceutesql, чтобы избежать внедрения sql

0 голосов
/ 18 апреля 2011

Вы напоминаете сбросить #temp в конце. Перед созданием таблицы вы должны проверить, существует ли #temp.

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL 
      DROP TABLE #temp
CREATE TABLE #temp (id int)
...