SQL Server 如何选择NULL值,作为字符串排序

ncgqoxb0  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(97)

我尝试从数据库中的内容生成SQL语句,基本上是通过生成INSERT语句将数据从一个数据库迁移到另一个数据库。
示例表t1:

c1   c2
r1 'a'   NULL
r2 'b'   'c'
select 'INSERT INTO t2 (c1, c2) VALUES (''' + c1 + ''', ''' + c2 + ''')' from t1

我希望输出:

INSERT INTO t2 (c1, c2) VALUES ('a', NULL)
INSERT INTO t2 (c1, c2) VALUES ('b', 'c')

但是第一个输出结果是NULL,我尝试了各种版本的ISNULL()和其他类似的方法来得到我想要的结果,但是没有找到有效的解决方案。
现在我使用ISNULL(c2, 'REPLACEWITHNULL'),在语句生成后执行搜索和替换,但是如果可能的话,我希望删除第二步。

---------------下面的解决方案! -------------

一旦我从DouadyRabbit那里得到了解决方案,我想到了另一个解决方案,不使用CASE语句,这是一个更紧凑的解决方案:

+  IIF(c1 IS NULL, 'NULL', '''' + c1 + '''') +

非常感谢DouadyRabbit!

5vf7fwbs

5vf7fwbs1#

有更好的方法来迁移数据库,但是你必须有一个合理的理由来这样做。下面的代码应该会对你有所帮助。

DECLARE @sourceTable TABLE (c1 VARCHAR(10) NULL, c2 VARCHAR(10) NULL)

INSERT INTO @sourceTable (c1, c2) VALUES ('a', NULL), ('b',   'c'), (NULL, 'd')

--SELECT * FROM  @sourceTable

SELECT 'INSERT INTO t2 (c1, c2) VALUES (' + CASE 
                                                WHEN c1 IS NULL THEN 'NULL' 
                                                ELSE  '''' + c1 + ''''
                                            END + ', ' +
                                            CASE 
                                                    WHEN c2 IS NULL THEN 'NULL' 
                                                    ELSE  ''''+ c2 + ''''
                                            END + ') '
FROM @sourceTable

相关问题