Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ld从每个devs机器上的一组类中创建数据库(很像实体框架),包括更新数据库的能力。本质上是为了清理表定义。只是好奇,为什么不将有效列推到一个新表中,然后删除旧表并重命名新表?@brian可能有很多数据,并且可能有许多外键指向保留的列。坦白说,因为我没有想_Sql_Sql Server - Fatal编程技术网

Sql ld从每个devs机器上的一组类中创建数据库(很像实体框架),包括更新数据库的能力。本质上是为了清理表定义。只是好奇,为什么不将有效列推到一个新表中,然后删除旧表并重命名新表?@brian可能有很多数据,并且可能有许多外键指向保留的列。坦白说,因为我没有想

Sql ld从每个devs机器上的一组类中创建数据库(很像实体框架),包括更新数据库的能力。本质上是为了清理表定义。只是好奇,为什么不将有效列推到一个新表中,然后删除旧表并重命名新表?@brian可能有很多数据,并且可能有许多外键指向保留的列。坦白说,因为我没有想,sql,sql-server,Sql,Sql Server,ld从每个devs机器上的一组类中创建数据库(很像实体框架),包括更新数据库的能力。本质上是为了清理表定义。只是好奇,为什么不将有效列推到一个新表中,然后删除旧表并重命名新表?@brian可能有很多数据,并且可能有许多外键指向保留的列。坦白说,因为我没有想到:-),如果可能的话,我还想保留数据,我有一个“重置”如果开发人员希望完全删除该表,或者只是想“更新”该表,则标记。我仍在胡思乱想,把一切都搞定。不过我会记住这一点@Krum110487您的目标是什么?要回收空间还是仅仅清理表定义?我正在开发


ld从每个devs机器上的一组类中创建数据库(很像实体框架),包括更新数据库的能力。本质上是为了清理表定义。只是好奇,为什么不将有效列推到一个新表中,然后删除旧表并重命名新表?@brian可能有很多数据,并且可能有许多外键指向保留的列。坦白说,因为我没有想到:-),如果可能的话,我还想保留数据,我有一个“重置”如果开发人员希望完全删除该表,或者只是想“更新”该表,则标记。我仍在胡思乱想,把一切都搞定。不过我会记住这一点@Krum110487您的目标是什么?要回收空间还是仅仅清理表定义?我正在开发一个库,它可以用来从每个devs机器上的一组类(很像实体框架)重新构建数据库,包括更新数据库的能力。基本上是为了清理表定义。我真的需要学习T-SQL,这非常有帮助,我现在需要做的就是生成表中当前列的列表,这将删除所有未列出的列!伟大的还有,是否有一种更简单的方法来生成项目列表,而不是简单的AND(名称“column 1”或名称“column 2”或名称“column 3”),这是我计划生成的,我假设,我可以简单地为“c”变量生成它。@Krum110487 SQL Server的哪个版本?如果2008+无法针对表值参数存在。如果之前您可以手动填充一个临时表,并针对该表执行一个不存在的操作。我真的需要学习T-SQL,这非常有帮助,我现在需要做的就是生成表中当前列的列表,这将删除所有未列出的列!伟大的还有,是否有一种更简单的方法来生成项目列表,而不是简单的AND(名称“column 1”或名称“column 2”或名称“column 3”),这是我计划生成的,我假设,我可以简单地为“c”变量生成它。@Krum110487 SQL Server的哪个版本?如果2008+无法针对表值参数存在。如果早些时候您可以手动填充一个临时表,并针对该表执行一个不存在的操作。啊,这很有意义!这段代码的要点是用于数据库生成,因此基本上只用于开发人员,而不是生产脚本,只是为了让我的生活更轻松,谢谢!啊,这是有道理的!这段代码的要点是用于数据库生成,因此基本上只用于开发人员,而不是生产脚本,只是为了让我的生活更轻松,谢谢!
declare @counter int
declare @col_count int
declare @col_name char(100)
declare @temp_sql char(100)
set @counter = 0

SELECT @col_count = COUNT(*) from sys.columns 
where Object_ID = Object_ID(N'test') 
AND name <> 'pk_test'

while @counter < @col_count
begin  
  with CTE as (
    select name, row_number() over (order by column_id) as ColNo
    from sys.columns where object_id = object_id('test') AND name <> 'pk_test'
  )
  select @col_name = name from CTE where ColNo = ((@counter) + 1)

  SET @temp_sql = 'ALTER TABLE test DROP column ' + @col_name + ';'
  EXECUTE (@temp_sql);

  set @counter = @counter + 1
end
SET @temp_sql = @temp_swl + 'ALTER TABLE test DROP column ' + @col_name
enter code here
while @counter < @col_count
begin  
  with CTE as (
    select name, row_number() over (order by column_id) as ColNo
    from sys.columns where object_id = object_id('test') AND name <> 'pk_test'
  )
  select @col_name = name from CTE where ColNo = ((@counter) + 1)

  SET @temp_sql = 'ALTER TABLE test DROP column ' + @col_name + ';'
  EXECUTE (@temp_sql);

  set @counter = @counter + 1
end
declare @columns table (colnum int not null identity(1, 1), colname varchar(255));

insert into @columns(colname)
    select name
    from sys.columns
    where object_id = object_id('test') AND name <> 'pk_test';

set @col_count = max(colnum) from @columns;

while @counter < @col_count
begin  

  select @col_name = name from @columns where ColNo = ((@counter) + 1);

  SET @temp_sql = 'ALTER TABLE test DROP column ' + @col_name + ';'
  EXECUTE (@temp_sql);

  set @counter = @counter + 1;
end;
DECLARE @t NVARCHAR(512), -- the table we're affecting
        @c SYSNAME;       -- the column we want to keep

SELECT @t = N'dbo.test', @c = N'pk_test';


IF EXISTS 
(
  SELECT 1 FROM sys.columns 
    WHERE [object_id] = OBJECT_ID(@t)
    AND name = @c
)
BEGIN

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'';

  SELECT @sql = @sql + N'
    ALTER TABLE ' + @t + ' DROP COLUMN ' + QUOTENAME(name) + ';'
  FROM sys.columns WHERE [object_id] = OBJECT_ID(@t) AND name <> @c;

  PRINT @sql;
  -- EXEC sp_executesql @sql;
END
ELSE
BEGIN
  PRINT 'Sorry, can't delete all columns from ' + @t + '.';
END