首页 > 解决方案 > SQL Server 在条件中使用文本文件

问题描述

我有一个似乎应该是一个简单的问题,但找不到一个简单的答案。我只有“读”权限,没有“写”权限。

我想创建一个简单的查询,例如: Select a, b, c from x where a in (c:\myfilename.txt)

考虑到我的限制(只读),这可能吗?

标签: sqlsql-serverconditional-statements

解决方案


我在评论中发布的 Excel 选项的格式更好一点(同样,这不是理想的或最好的,但它有效)。它很糟糕而且很脏,但是在缺少权限或只是为了快速关闭时可以工作。

在 Excel 中,将其复制到数据同一行的单元格中(并将 A1 替换为数据列):

="Select '" &A1&"' AS FieldName UNION ALL"

注意:如果您有多个列,您也可以这样做,只需为多个列编辑与此类似的公式:

="Select '" &A1&"' AS FieldName, '"&B1&"' as FieldName2 UNION ALL"

然后将这个公式一直复制到文件中的每一行。

然后复制公式的结果,应该如下所示:

Select '1' AS FieldName UNION ALL
Select '2' AS FieldName UNION ALL
Select '3' AS FieldName UNION ALL

(为了在从 Excel 复制到 SQL 时使文本更小,“AS FieldName”可能只是“AS F”,或者您可以完全关闭它(如果处理一个字段)。如果处理很多行可以加快速度向上复制/粘贴一点,让你的文件更小,以便你的 SQL 脚本。一段时间后,这几个字符加起来。

然后删除最后一个 UNION ALL(否则它将不是有效的 SQL)。

然后你可以在你的代码中这样使用它:

Select a, b, c 
from x 
where a in (
    Select '1' AS FieldName UNION ALL
    Select '2' AS FieldName UNION ALL
    Select '3' AS FieldName 
)

如果您有大量数据,您可以执行类似的操作以使其更易于阅读(但脚本顶部仍有大量数据)。

-- OR USE temp table instead of table variable
DECLARE @TableData AS TABLE (
    FieldValue VARCHAR(50)
)

INSERT INTO @TableData 
Select '1' AS FieldName UNION ALL
Select '2' AS FieldName UNION ALL
Select '3' AS FieldName 


Select a, b, c 
from x 
where a in (
    SELECT FieldValue
    FROM @TableData
)

推荐阅读