powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как полегче создать таблицу В со структурой как в таблице А
3 сообщений из 3, страница 1 из 1
Как полегче создать таблицу В со структурой как в таблице А
    #32030980
Sergy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
???
...
Рейтинг: 0 / 0
Как полегче создать таблицу В со структурой как в таблице А
    #32030984
Deem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT * INTO B FROM A WHERE 1<>1
...
Рейтинг: 0 / 0
Как полегче создать таблицу В со структурой как в таблице А
    #32030996
DAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-- Напрягся и написал функцию. Можете попробовать.

CREATE FUNCTION f_TabAsTab
-- Оператор создания временной таблицы со структурой указанной.
(@TAB_NAME sysname, -- Имя таблицы:
-- наличие двух предваряющих
-- символов ## определяет
-- глобальную таблицу, иначе -
-- локальную
@COL_LIST varchar(500)) -- Список невключаемых столбцов,
-- каждый из которых обрамляется
-- скобками [ ]
RETURNS varchar(3000) -- Оператор
AS BEGIN declare @RES varchar(3000), @NC sysname,
@I int, @R int, @IDT int
select @TAB_NAME=replace(@TAB_NAME,' ',''),@I=datalength(@TAB_NAME),
@COL_LIST=replace(@COL_LIST,' ',''),@R=0
if @I = 0 RETURN NULL
if substring(@TAB_NAME,1,1) = '#' select @R=@R+1
if substring(@TAB_NAME,2,1) = '#' select @R=@R+1
select @I=@I-@R
if @I = 0 RETURN NULL
if @R > 0 select @TAB_NAME=substring(@TAB_NAME,@R+1,@I)
select @IDT=Object_Id(@TAB_NAME)
if @IDT is NULL RETURN NULL
select @RES='create table [#'+case when @R=2 then '#' else '' end+
@TAB_NAME+'] ('+char(13),@R=NULL
select @RES=@RES+' ['+name+'] ['+type_name(xusertype)+']'+
rtrim(case when type_name(xusertype) in ('varchar','char','decimal',
'numeric','nchar','nvarchar','binary','varbinary')
then '('+convert (varchar(6),ColumnProperty(id,name,'precision'))+
case when isnull(OdbcScale(xtype,xscale),0)=0 then ')'
else ','+convert(varchar(2),OdbcScale(xtype,xscale))+')' end
else '' end)+
case when type_name(xusertype) in ('varchar','char','text',
'ntext','nchar','nvarchar')
then ' collate database_default' else '' end+
case when ColumnProperty(@IDT,name,'IsIdentity')=0 then ''
else ' identity('+convert(varchar(4,IDENT_SEED(@TAB_NAME))+
','+convert(varchar(4,IDENT_INCR (@TAB_NAME))+')' end+' '+
case when isnullable=0 then 'NOT NULL' else 'NULL' end+','+
char(13) from syscolumns where id = @IDT and number = 0
and isnull(charindex('['+name+']',@COL_LIST),0) = 0
order by colid
select @R=indid from sysindexes where id = @IDT and indid > 0
and indid < 255 and status & 64 = 0 and status & 2048 != 0
if @R is not NULL begin
select @RES=@RES+' Primary Key (['+index_col(@TAB_NAME,@R,1)+']',
@I=2,@NC=index_col(@TAB_NAME,@R,2)
while @NC is not NULL
select @RES=@RES+',['+@NC+']',@I=@I+1,@NC=index_col(@TAB_NAME,@R,@I)
select @RES=@RES+'))'+char(13) end
else select @RES=substring(@RES,1,datalength(@RES)-2)+')'+char(13)
RETURN @RES END
-- #### (c) "PolySystem" 11.03.01 ##############################

GO
-- Вызов
--select dbo.f_TabAsTab('#ARM',null) [Результат]
-- Результат
-------------------------------------------------------
--create table [#ARM] (
-- [N_ARM] [tinyint] NOT NULL,
-- [NAM_ARM] [varchar](30) collate database_default NULL,
-- [PR_MENU] [bit] NOT NULL,
-- Primary Key ([N_ARM]))
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как полегче создать таблицу В со структурой как в таблице А
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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