1

Excel 查询 SQL Server。尝试使用当前用户名进行查询。我有一个在 SQL Server 中查询视图的 Excel 文件。视图设置为根据用户查询视图返回结果。

我在网络服务器上设置了一个文件供其他人访问,希望当他们打开文件时,它只会显示与他们相关的信息。

但这些信息仍然只针对我自己。我希望它显示用户使用文件的信息,就好像他们直接查询视图一样。

这是视图的示例查询:

Select * from dbo.WorkEstimate where Estimator = SUSER_NAME()

但是 Excel 表只返回与我有关的信息。我认为这可能与connectstring总是指定我的工作站名称有关。有没有办法改变它以反映正在使用该文件的个人(或他们的工作站)?

4

2 回答 2

3

SQL 语句中的SUSER_NAME()(transact-sql) 指​​的是当前执行的 SQL 语句上下文中的当前用户。在您的情况下,它是您在连接字符串中指定的用户 ID。sql server 使用您的连接字符串中指定的用户来运行该语句,从而SUSER_NAME()反映该用户。

您将需要使用以下 Excel 函数指定 Excel 在(Windows 环境)下运行的用户:

  • Application.Username是在 Excel 工具>选项中设置的用户名(在用户名框下)
  • Environ("Username")是您为 Windows 注册的名称,请参阅控制面板 > 系统

因此,您的 SQL 语句必须类似于:

vsSQL = "SELECT * FROM dbo.WorkEstimate WHERE (Estimator = '" & Environ("Username") & "');"

希望这可以帮助。

于 2013-02-23T04:21:01.587 回答
0

您无需让 Excel 与 SQL Server 通信即可解决此问题。Excel 需要与用户的机器进行通信。

使用此代码可发现与登录到机器的用户相关的所有环境变量。查看结果以确定您需要传递给查询的内容。

将模块添加到您的 Excel 文件并粘贴以下内容:

Sub ListAllEnvironmentVariables()
    Dim ws As Worksheet
    Dim rng As Range

    Set ws = Sheets("Sheet1")
    Set rng = ws.Range("A1")

    Dim i As Integer
    i = 1
    Do Until Environ$(i) = ""
        rng.Offset(i - 1).Value = Environ(i)
        i = i + 1
    Loop
End Sub

Sheet1在我的示例中使用,但您可以更改它并将其设置ws为工作簿中的任何空白表以查看它是如何工作的。Sheet1如果工作表上有数据,显然不要使用。

于 2013-02-23T04:28:47.550 回答