我正在尝试编写一个脚本,该脚本将显示每列中的非空值的数量以及表中的总行数.
我找到了几种方法来做到这一点:
__CODE__
和
__CODE__
但这些要求我手动输入每个列名.有没有办法为每列执行此操作而不列出它们?
我对 SQL Server 2008 的了解有限,我无法确切地找到如何做到这一点。我的想法是使用 SELECT 过程的结果作为列名列表(基于在这个老问题How do you return the columns from a table?中创建的过程)我想做类似的事情:
INSERT INTO new_table (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName')
SELECT (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName') FROM YourTableName
Run Code Online (Sandbox Code Playgroud)
我想做的是用具有较少列的表中的数据填充一个更大的表(所有这些都包含在更大的表中)。也许有更好的方法来做到这一点。
在 SQL Server 中,我们使用以下命令获取表描述:
Sp_help TableName
Run Code Online (Sandbox Code Playgroud)
当它以随机顺序显示所有列名时。有没有办法如果我想按某种顺序(降序或升序)按字母顺序排列所有列名称?
这将帮助我快速查看表格以查看所有列都存在什么以及表格中是否存在特定列。
在 SQL Server Management Studio 2008 中,我可以运行
sp_columns MY_TABLE
Run Code Online (Sandbox Code Playgroud)
获取所有列名(在 下COLUMN_NAME)。但是,如何使用 Perl DBI 获取相同的信息?
特别是,我试过
my $result = $dbh->selectall_hashref("sp_columns MY_TABLE", 'COLUMN_NAME');
Run Code Online (Sandbox Code Playgroud)
希望列名是返回散列的键。
事实上,即使那是成功的,这也不是我想要的,因为我需要保留该表中列的顺序。所以我试过了
my $sth = $dbh->prepare("sp_columns $table");
$sth->execute();
while (my @row = $sth->fetchrow_array) {
# process @row;
}
Run Code Online (Sandbox Code Playgroud)
但两者都不起作用。我收到错误消息
DBD::Sybase::db selectall_hashref failed: Server message number=102 severity=15 state=1 line=1 server=XXXX text=Incorrect syntax near '.'
Run Code Online (Sandbox Code Playgroud)
我也参考了这篇文章。显然,下面的查询也不要在我Management Studio中的工作:
select * from information_schema.columns where table_name = MY_TABLE
Run Code Online (Sandbox Code Playgroud)
错误信息为
Msg 208, Level 16, State 1, Line 2
Invalid …Run Code Online (Sandbox Code Playgroud)