Sql server 将外壳嵌入外壳内

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

当和CONCAT子句时,我在
案例中遇到问题,这一个:

 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;