我有100列的表格。我想写select * from table
,空列值应替换为空白。我不想在其中包含100列
我的选择语句并写:
select
isnull(col1,''),
isnull(col2,''),
...
isnull(col100,'')
from table
答案 0 :(得分:3)
检查一下:
DECLARE @TableName VARCHAR(MAX)='ASC_LOT_TBL'
DECLARE @SchemaName VARCHAR(MAX)='dbo'
DECLARE @ColumnList VARCHAR(MAX)
SELECT @ColumnList= ISNULL(@ColumnList+',','')+
CASE WHEN DATA_TYPE LIKE '%char' THEN 'ISNULL('+COLUMN_NAME+','''') AS '+COLUMN_NAME
WHEN DATA_TYPE = 'int' THEN 'ISNULL('+COLUMN_NAME+',''0'') AS '+COLUMN_NAME
ELSE COLUMN_NAME END
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME=@TableName
AND TABLE_SCHEMA=@SchemaName
ORDER BY ORDINAL_POSITION
SELECT 'SELECT '+@ColumnList+' FROM ' +@SchemaName+'.'+@TableName
答案 1 :(得分:1)
好吧,您可以遍历上面在SQL / script级别上的所有建议,或者将表的设计更改为不允许NULL并将默认值设置为''(在MSSQL中为('')) 。
这样,当插入新条目时,该列将存储数据/值“”,而不是NULL。 在这种情况下,您可以从带有“空白”的表中选择*作为回报,而不是NULL。
您需要从脚本或表设计中选择一种或另一种方法。
答案 2 :(得分:0)
X/Y problem apart,回答您的特定问题:
要编写查询,您可以在编辑器中使用正则表达式搜索并替换,以避免每行编辑一百次。
只需选择所有相关行,其列名在t
之后,
SELECT
打开搜索并用col1,
col2,
col3,
...
替换(\S+),
(Ctrl + H),然后用ISNULL($1, ''),
替换,在您喜欢的编辑器中激活了正则表达式模式,并将替换仅应用于选择项。
SSMS中的插图:
它可以在Visual Studio,SQL Server Management Studio,记事本++等中运行...
(前提是您的列名中没有空格,否则请发表评论以指定列名的方式,我们可以找到一种快速的解决方案)
最后一行需要手动编辑,但是您仍然保存了99个版本;)。
您还应该能够创建一个视图,然后在视图上执行SELECT
,这将减少只编写一次该视图的需要(但未经测试,并且不确定是否存在性能问题)。您的用例)