Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамические переменные / 3 сообщений из 3, страница 1 из 1
01.09.2002, 13:18:43
    #32047331
VadimM.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические переменные
Привет всем. Знатоки-нужна помощь.
Задача - перед добавлением столбца в таблицу, проверить его наличие.
Данный запрос работает.

declare @string varchar(500),
@column_name varchar(200)

set @column_name = (select name from syscolumns
where name = 'rowguid' and
id = (select object_id ('[pubs]..[t1]')))
print @column_name возвращает 'rowguid'.

Проблема когда нужно передать базу и таблицу как переменные.

declare @string varchar(500),
@column_name varchar(200),
@db varchar(50),
@table varchar(50)

set @db = 'pubs'
set @table = 't1'
set @string = 'declare @column_name varchar(200) ' +
'set @column_name = (select name from syscolumns
where name = ''rowguid'' and id =' +
'(select object_id (''[' + @db + ']..[' +
@table + ']'')))'
execute (@string)
print @column_name возвращает 'NULL'.

Если вставлять переменные в сам запрос(where name = 'rowguid' and id = @varible),
жалуется на другие errors.
Как с этим бороться?
SQL Server 2000, SP2.
...
Рейтинг: 0 / 0
01.09.2002, 15:34:26
    #32047333
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические переменные
1. exec и sp_executesql всегда выполняются как отдельный пакет(batch). Поэтому переменные даже с одинаковыми именами есть разные переменные.

Можно делать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
use pubs
go
declare @string nvarchar( 500 ), @column_name varchar( 200 ), @db varchar( 50 ), @table varchar( 50 ) 

set @db = 'pubs' 
set @table = 'authors' 
set @string = 'set @column_name = (select name from ['+@db+']..syscolumns 
where name = ''au_id'' and id =' + '(select object_id (''[' + @db + ']..[' + @table + ']'')))' 
exec sp_executesql @string, N'@column_name varchar(200) out', @column_name = @column_name out
select @column_name


2.
Для проверки наличия столбца в таблице можго использовать

Код: plaintext
select column_name from pubs.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'authors' AND column_name = 'au_id'
...
Рейтинг: 0 / 0
02.09.2002, 12:56:17
    #32047403
VadimM.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические переменные
Glory - Спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамические переменные / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]