Sql server 将外壳嵌入外壳内
当和CONCAT子句时,我在Sql server 将外壳嵌入外壳内,sql-server,tsql,Sql Server,Tsql,当和CONCAT子句时,我在案例中遇到问题,这一个: WHEN 'nvarchar' THEN CONCAT(column_name, ' ', 'varchar', '(', CHARACTER_MAXIMUM_LENGTH, ')', CASE ISNULLABLE WHEN 'NO' THEN ' not null' , ',') 您可以看到,我在CONCAT中有额外的CASE,如果有IS
案例中遇到问题,这一个:
WHEN
'nvarchar'
THEN
CONCAT(column_name, ' ', 'varchar', '(', CHARACTER_MAXIMUM_LENGTH, ')',
CASE
ISNULLABLE
WHEN
'NO'
THEN
' not null' , ',')
您可以看到,我在CONCAT
中有额外的CASE
,如果有ISNULLABLE
结果NO
,那么我还想在整个CONCAT
输出中添加文本'notNull'
然而,我得到了一个错误:
“,”附近的语法不正确
完整代码:
SELECT
table_schema,
column_name,
CASE data_type
WHEN 'nvarchar'
THEN CONCAT(column_name, ' ', 'varchar', '(', CHARACTER_MAXIMUM_LENGTH, ')',
CASE ISNULLABLE
WHEN 'NO' THEN ' not null' , ',')
WHEN 'datetime2'
THEN CONCAT(column_name, ' ', 'timestamp', ',')
ELSE CONCAT(column_name, ' ', data_type, ' ')
END AS 'Postgres', IS_NULLABLE
FROM
information_schema.columns;
您忘记结束内部案例陈述。
此外,您拼写错误的可为空
CASE data_type
WHEN 'nvarchar' THEN CONCAT(column_name, ' ', 'varchar', '(', CHARACTER_MAXIMUM_LENGTH, ')', CASE IS_NULLABLE WHEN 'NO' THEN ' not null' ELSE 'nullable' END , ',')
WHEN 'datetime2' THEN CONCAT(column_name, ' ', 'timestamp', ',')
ELSE CONCAT(column_name, ' ', data_type, ' ')
END AS 'Postgres' ...
您也可以尝试以下重新组织的CONCAT/CASE语句-
SELECT
CONCAT(
column_name,
' ',
CASE
WHEN data_type = 'nvarchar' AND IS_NULLABLE = 'NO' THEN CONCAT('varchar(',CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(20)),') not null,')
WHEN data_type = 'nvarchar' AND IS_NULLABLE = 'YES' THEN CONCAT('varchar(',CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(20)),'),')
WHEN data_type = 'datetime2' THEN CONCAT('timestamp', ',')
ELSE CONCAT(data_type, ' ')
END,
' '
) AS 'Postgres'
FROM
information_schema.columns;
您拼写错误的可为空
。你对“非空”、“非空”、“非空”是什么意思?在这种情况下,,“,”)
是什么意思?'not null'
应该在某个函数中吗?好的,我纠正了这一点:当'nvarchar'然后CONCAT(column_name','varchar','(',CHARACTER_MAXIMUM_LENGTH','),当'NO'然后'not null'END','时,CASE是可为null的。@honeybeager这是为postgres构建脚本,要不使monkey job创建表和类型,请通过在“not null”
和,
之间插入END
,关闭内部大小写表达式
SELECT
CONCAT(
column_name,
' ',
CASE
WHEN data_type = 'nvarchar' AND IS_NULLABLE = 'NO' THEN CONCAT('varchar(',CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(20)),') not null,')
WHEN data_type = 'nvarchar' AND IS_NULLABLE = 'YES' THEN CONCAT('varchar(',CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(20)),'),')
WHEN data_type = 'datetime2' THEN CONCAT('timestamp', ',')
ELSE CONCAT(data_type, ' ')
END,
' '
) AS 'Postgres'
FROM
information_schema.columns;