Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Здравствуйте,

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

ALTER TABLE TSimpleTable
ADD SimpleField bit NULL

UPDATE TSimpleTable
SET SimpleField = 1

И вот такой скрипт я хочу прогнать единым махом по F5, но он спотыкается с вышеуказанный ошибкой. Как программист я могу понять(и даже простить) MS SQL Server, ибо на момент нажатия кнопочки у таблицы нет такого поля. Но как бы ему подсказать что он обязательно будет, не переживай, иди работай?
31 окт 12, 14:10    [13402366]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Glory
Member

Откуда:
Сообщений: 104760
ALTER TABLE TSimpleTable
ADD SimpleField bit NULL
GO
UPDATE TSimpleTable
SET SimpleField = 1
31 окт 12, 14:11    [13402374]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Glory
ALTER TABLE TSimpleTable
ADD SimpleField bit NULL
GO
UPDATE TSimpleTable
SET SimpleField = 1


Incorrect syntax near 'NULL'.
31 окт 12, 14:16    [13402424]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
OracleLover
Glory
ALTER TABLE TSimpleTable
ADD SimpleField bit NULL
GO
UPDATE TSimpleTable
SET SimpleField = 1


Incorrect syntax near 'NULL'.
А через какое приложение вы выполняете сей скрипт?
31 окт 12, 14:19    [13402456]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Glory
Member

Откуда:
Сообщений: 104760
OracleLover
Incorrect syntax near 'NULL'.

ну так напишите правильный синтаксис
31 окт 12, 14:20    [13402457]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Гавриленко Сергей Алексеевич
OracleLover
пропущено...


Incorrect syntax near 'NULL'.
А через какое приложение вы выполняете сей скрипт?


Microsoft SQL Server Management Studio 10.50.1617.0

Glory
поставил go после ALTER. Стала выдавать такую ошибку. Что исправлять?
31 окт 12, 14:23    [13402472]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
OracleLover
Гавриленко Сергей Алексеевич
пропущено...
А через какое приложение вы выполняете сей скрипт?


Microsoft SQL Server Management Studio 10.50.1617.0

Glory
поставил go после ALTER. Стала выдавать такую ошибку. Что исправлять?


К сообщению приложен файл. Размер - 8Kb
31 окт 12, 14:24    [13402488]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Гавриленко Сергей Алексеевич
OracleLover
пропущено...


Microsoft SQL Server Management Studio 10.50.1617.0

Glory
поставил go после ALTER. Стала выдавать такую ошибку. Что исправлять?


печально, а у меня падает.

Причем крайне интересно. Если прогнать последовательно сначала alter, а потом update - и потом столбец удалить и снова прогнать скрипт, то работает все нормально.
31 окт 12, 14:27    [13402512]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Скрипт, который падает, покажете, нет?
31 окт 12, 14:29    [13402537]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Гавриленко Сергей Алексеевич
Скрипт, который падает, покажете, нет?


USE TestDB
GO


IF EXISTS 
( 
 SELECT * FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME = 'TSimpleTable' 
 AND (COLUMN_NAME = 'SimpleField')
)
BEGIN
    PRINT 'Column SimpleField already exists'
END
ELSE
BEGIN
   ALTER TABLE TSimpleTable
   ADD SimpleField bit NULL
   --GO при этой директиве падает с ошибкой неправильного синтаксис около NULL
 
    UPDATE TSimpleTable
    SET SimpleField = 1
END


Тут в настройках SSMS скорее всего дело.
31 окт 12, 14:34    [13402579]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Glory
Member

Откуда:
Сообщений: 104760
OracleLover
Тут в настройках SSMS скорее всего дело.

Тут дело в непонимании,что такое пакет
Откуда вдруг взялись IF-BEGIN-END-ы ?
31 окт 12, 14:37    [13402600]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Glory
OracleLover
Тут в настройках SSMS скорее всего дело.

Тут дело в непонимании,что такое пакет
Откуда вдруг взялись IF-BEGIN-END-ы ?


а как же без них? Мне проверки нужны.
31 окт 12, 14:41    [13402628]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Glory
Member

Откуда:
Сообщений: 104760
OracleLover
а как же без них? Мне проверки нужны.

Тогда подождем еще немного. Пока вы все расскажите.
31 окт 12, 14:42    [13402634]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Glory
OracleLover
а как же без них? Мне проверки нужны.

Тогда подождем еще немного. Пока вы все расскажите.


А что еще вы ждете?

Вот скрипт, есть проверка на существования столбца. Он не выполняется. Как бе все, финита ля комедия
31 окт 12, 14:46    [13402667]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Glory
OracleLover
а как же без них? Мне проверки нужны.

Тогда подождем еще немного. Пока вы все расскажите.


Вячеслав,
не делайте мозги человеку, а просто помогите. Тем более знаете как.

OracleLover
"GO" - это не SQL команда, это своего рода "линия разделения разных скриптов в одном файле".
Её даже можно заменить. И работает это только в SSMS, а не в процедурах или "внутри скрипта".

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

В вашем случае поможет банальный динаический скрипт. Хотя бы часть

exec ('
UPDATE TSimpleTable
SET SimpleField = 1
')

или sp_executesql (лучше её постоянно использовать).
31 окт 12, 14:51    [13402704]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31420
OracleLover
Вот скрипт, есть проверка на существования столбца. Он не выполняется. Как бе все, финита ля комедия
Скрипт неправильный, вам нужно прочитать про команду GO, и придумать скрипт без неё.

Команда GO - она не для сервера, для него такой не существует, это команда для некоторых клиентских приложений.

Проще всего представлять, когда вы пишите скрипты, что всё, что разделено GO, будет выполняться на разных компьютерах в разное время, тогда вам будет проще это представить и написать правильный код.
31 окт 12, 14:53    [13402726]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
alexeyvg
OracleLover
Вот скрипт, есть проверка на существования столбца. Он не выполняется. Как бе все, финита ля комедия
Скрипт неправильный, вам нужно прочитать про команду GO, и придумать скрипт без неё.

Команда GO - она не для сервера, для него такой не существует, это команда для некоторых клиентских приложений.

Проще всего представлять, когда вы пишите скрипты, что всё, что разделено GO, будет выполняться на разных компьютерах в разное время, тогда вам будет проще это представить и написать правильный код.


Про GO не я написал

NIIIK
не хотелось бы писать динамику только из слишком умного сервера. Я думал есть способ.

Всем спасибо за ответы.
31 окт 12, 14:57    [13402768]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
OracleLover

NIIIK
не хотелось бы писать динамику только из слишком умного сервера. Я думал есть способ.

Всем спасибо за ответы.


Правильной динамики нечего боятся.... она имеет свойство расширяться.

Любой запрос для СКЛ сервера динамический в прниципе. Он всегда о нём заранее не знает. Если вы его написали в SSMS, то он такой же sp_executesql для SQL Server (многие ОРМ с клиентов так и работают, Linq2SQL например).
В случае хранимой процедуры можно сказать что она "уже была на сервере", но только факт вызова это процедуры такой же динамический.

Это скриптовый язык. Чего вы хотите :) ?

Тем более никто вам не говорил что строка выполняемая через sp_executesql не может быть статична.

Разделяйте две динамики "текст запроса формируется динамически и при этом если криво реализовать можно нажить SQL иньекции" и "выполнился динамически".

Рассматривайте эту sp_executesql как SQL сервер клиент для самого себя.
31 окт 12, 15:03    [13402825]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
OracleLover
Гавриленко Сергей Алексеевич
Скрипт, который падает, покажете, нет?


USE TestDB
GO


IF EXISTS 
( 
 SELECT * FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME = 'TSimpleTable' 
 AND (COLUMN_NAME = 'SimpleField')
)
BEGIN
    PRINT 'Column SimpleField already exists'
END
ELSE
BEGIN
   ALTER TABLE TSimpleTable
   ADD SimpleField bit NULL
   --GO при этой директиве падает с ошибкой неправильного синтаксис около NULL
 
    UPDATE TSimpleTable
    SET SimpleField = 1
END


Тут в настройках SSMS скорее всего дело.
USE tempdb;

IF OBJECT_ID(N'[dbo].[T]','U') IS NOT NULL DROP TABLE [dbo].[T];

CREATE TABLE T(X INT);

INSERT T(X)VALUES(22),(88),(NULL),(-8);

SELECT * FROM [dbo].[T];

IF COL_LENGTH(N'[dbo].[T]',N'F') IS NULL
ALTER TABLE [dbo].[T] ADD [F] INT NULL;

EXECUTE(N'UPDATE [dbo].[T] SET F=X;');

SELECT * FROM [dbo].[T];

DROP TABLE [dbo].[T];
31 окт 12, 15:18    [13402972]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Glory
Member

Откуда:
Сообщений: 104760
NIIIK
Вячеслав,
не делайте мозги человеку, а просто помогите. Тем более знаете как.

Т.е. я по фразе "И вот такой скрипт я хочу прогнать единым махом по F5, " должен понять
- что будет сложный скрипт
- что он будет вызываться еще где-то кроме студии
- что автору "не хотелось бы писать динамику только из слишком умного сервера"
31 окт 12, 15:58    [13403251]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Glory
Т.е. я по фразе "И вот такой скрипт я хочу прогнать единым махом по F5, " должен понять
- что будет сложный скрипт
- что он будет вызываться еще где-то кроме студии
- что автору "не хотелось бы писать динамику только из слишком умного сервера"


Я считаю высока вероятность того что Вы это действительно поняли, даже я понял. Может быть даже с первого поста могли ответить "если скрипт простой в SSMS, то просто поставте go или напишите Exec ('update...'). Тем более зная специфику "GO".

С другой стороны человеку может быть и непонятно что такое этот "Го". Я когда-то давно думал что это что-то вроде как в Делфе Application.ProcessMessages; (выполнить очередь сообщений). Тем более мне почему-то кажется что топик-стартер не с МсСКЛ до этого в основном работал.

Скорее всего тестирует скрипт в ССМС, что бы выполнить его через Линкед/Гетерагенный сервис. Может быть даже какую-то синхронизацию-репликацию вояет.

Вообщем "добрее надо быть по возможности".
31 окт 12, 16:13    [13403364]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
NIIIK
Вообщем "добрее надо быть по возможности".
Давайте мы не будем поучать других, что надо делать, а что нет. Все люди взрослые, как-нибудь сами разберутся.
31 окт 12, 16:16    [13403392]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
NIIIK
С другой стороны человеку может быть и непонятно что такое этот "Го". Я когда-то давно думал что это что-то вроде как в Делфе Application.ProcessMessages; (выполнить очередь сообщений). Тем более мне почему-то кажется что топик-стартер не с МсСКЛ до этого в основном работал.
Кнопку F1 нажать, не?
31 окт 12, 16:17    [13403402]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
Glory
Member

Откуда:
Сообщений: 104760
NIIIK
Я считаю высока вероятность того что Вы это действительно поняли, даже я понял. Может быть даже с первого поста могли ответить "если скрипт простой в SSMS, то просто поставте go или напишите Exec ('update...'). Тем более зная специфику "GO".

Автор с таким количеством сообщений мог бы выражать свои мысли более пространно.
Никого тянуть за язык я не собираюсь. И придумывать за него все возможные случаи тоже.
Автор тупо ждет, что ему сразу "по фотографии" готовое решение предоставят. А он сюда будет только тексты ошибок кидать. А не попытается в хелпе прочитать про GO
31 окт 12, 16:19    [13403427]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания и изменения столбца не проходит по причине Invalid Column Name  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31420
OracleLover
Про GO не я написал
Вы писали, вот:
OracleLover
--GO при этой директиве падает с ошибкой неправильного синтаксис около NULL

OracleLover
NIIIK
не хотелось бы писать динамику только из слишком умного сервера. Я думал есть способ.
Другого способа нет...
31 окт 12, 19:46    [13404713]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить