2012-01-06 1 views
3

У меня есть SQL-скрипт, который без проблем создает две таблицы базы данных с их ключами и ограничениями. Я не буду включать весь код, но и «скелет» выглядит следующим образом:Создавать таблицы SQL Server и хранимые процедуры в одном скрипте?

BEGIN 
CREATE TABLE [table] (

) 

CREATE TABLE [table2] (

) 

ALTER TABLE table... 

ALTER TABLE table2.... 


END 

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

CREATE PROCEDURE Test 
    @x int 
AS 
BEGIN 
    SELECT COUNT(*) 
    FROM table 
END 
GO 

Я попытался положить его в конце сценария и также попытался с и без начала, конца и GO теги, но я получаю сообщение об ошибке, которое говорит «неправильный синтаксис около ПОРЯДКЕ».

+0

Вы пытаетесь создать sql-скрипт? Я смущен словом «схема». –

+0

Да, возможно, это то, что я имел в виду! Является новым для SQL – DevDave

+0

Если у вас есть ошибка при добавлении 'GO' к вашему сценарию, должна быть другая проблема. Я знаю, что вы сказали, что сценарий длинный, но, возможно, вы можете опубликовать раздел, вызывающий проблему? Кроме того, прочитайте документацию на 'GO', если вы не уверены в ней: http://msdn.microsoft.com/en-us/library/ms188037.aspx – Tony

ответ

5

Попробуйте так:

USE BDNAME 
GO 

BEGIN 
CREATE TABLE [table] (

) 

CREATE TABLE [table2] (

) 

ALTER TABLE table... 

ALTER TABLE table2.... 


END 


USE BDNAME 
GO 

CREATE PROCEDURE Test 
    @x int 
AS 
BEGIN 
    SELECT COUNT(*) 
    FROM table 
END 

GO 
+0

Вы имели в виду под названием GO в конце создания таблицы и перед хранимой процедурой? Дал попытку и получил «неправильный синтаксис около GO» – DevDave

+0

это для sybase ase, mysql, sql server, что? –

+0

Я использую сервер sql – DevDave

3

Вместо использования НАЧАТЬ END, положить GO между всеми вашими заявлениями типа Create, Alter. Также я хотел бы сообщить вам, что включение GO будет создавать блоки в вашем скрипте, поэтому, если вы создадите локальную переменную в одном блоке, она недоступна в другом.

CREATE Table Table1(
    --Your Code 
) 

GO 

CREATE PROCEDURE Test 
     @x int 
AS 
BEGIN 
    SELECT COUNT(*) 
    FROM Table1 
END 

GO 

--Continue your script 

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

+0

Вы имеете в виду поставить GO после каждого блока кода. После этого я получил следующую ошибку: Неправильный синтаксис рядом с ключевым словом «CREATE». Неверный синтаксис рядом с ключевым словом «ALTER». Неправильный синтаксис около 'GO'. Неправильный синтаксис около 'GO'. «CREATE/ALTER PROCEDURE» должно быть первым оператором в пакете запросов. – DevDave

+0

Было бы легко, если бы вы могли опубликовать свой реальный скрипт, могут быть начальные кодовые блоки –

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