【问题标题】:SQL Compare list of string values with table without writing to database and retrieve rest of list [closed]SQL比较字符串值列表与表而不写入数据库并检索列表的其余部分[关闭]
【发布时间】:2023-03-03 10:30:01
【问题描述】:

我有一个包含很多值(字符串)的逗号分隔列表,我想将它与 MS SQL Server 2008 表进行比较。我正在尝试获取列表中哪些值不在表中。如果可能的话,我根本不想写入数据库。

我找到了与我的问题类似的上一篇文章,但我不太清楚如何使它与字符串一起使用。

Comparing list of values against table

有什么建议吗?

【问题讨论】:

    标签: sql sql-server database comparison


    【解决方案1】:

    跟进此事。我能找到的最接近解决方案的方法是手动输入逗号分隔值,首先格式化所有行,然后运行如下:

    DECLARE @TempTable table(firstcol varchar(50))
    INSERT INTO @TempTable VALUES ('mystring1')
    INSERT INTO @TempTable VALUES ('mystring2')
    INSERT INTO @TempTable VALUES ('mystring3')
    INSERT INTO @TempTable VALUES ('mystring4')
    ...
    SELECT * FROM @TempTable WHERE firstcol NOT IN (SELECT tablecol FROM [MyTable])
    

    如果我有一个更大的版本(2012 年?),我似乎也可以这样做:

    INSERT INTO @TempTable VALUES('mystring1'),('mystring2'),('mystring3')
    

    虽然仍在写入数据库,但我能找到的最接近的其他替代方案是:

    sp_configure 'show advanced options', 1;
    RECONFIGURE;
    GO
    sp_configure 'Ad Hoc Distributed Queries', 1;
    RECONFIGURE;
    GO
    
    select TerritoryID
          ,TotalSales
          ,TotalCost
    INTO CSVImportTable
    from openrowset('MSDASQL'
                   ,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}'
                   ,'select * from C:\csvtest.CSV')
    

    在这里找到:How to create and populate a table in a single step as part of a CSV import operation?

    还有一个临时表的替代方案:

    CREATE TABLE #TempTable (FName nvarchar(max),SName nvarchar(max),
                              Email nvarchar(max));
    BULK INSERT #TempTable 
    FROM 'C:\52BB30AD694A62A03E.csv' 
    WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')
    

    在这里找到:Whats wrong with this SQL statement for table variable bulk insert

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多