Excel查询SQL Server。尝试使用当前用户名进行查询。我有一个Excel文件,用于查询SQL Server中的视图。视图设置为根据查询视图的用户返回结果。
我在网络服务器上设置了一个文件,供其他人访问,希望当他们打开文件时,它只会显示与他们相关的信息。
但信息仍然仅指我自己。我希望它显示用户使用该文件的信息,就像他们直接查询视图一样。
以下是视图的示例查询:
Select * from dbo.WorkEstimate where Estimator = SUSER_NAME()
但Excel表格仅返回与我有关的信息。我认为它可能与始终指定我的工作站名称的connectstring
有关。有没有办法改变它以反映使用该文件的个人(或他们的工作站)?
答案 0 :(得分:3)
SQL statment中的SUSER_NAME()
(transact-sql)是指当前正在执行的SQL语句的上下文中的当前用户。在您的情况下,它是您在连接字符串中指定的用户标识。 sql server使用connectionstring中指定的用户来运行该语句,因此SUSER_NAME()
反映了该用户。
您需要使用以下Excel函数指定运行Excel的用户(Windows环境):
Application.Username
是Excel工具中设置的用户名>选项(在用户名框下)Environ("Username")
是您为Windows注册的名称,请参阅控制面板>系统因此,您的SQL语句必须是:
vsSQL = "SELECT * FROM dbo.WorkEstimate WHERE (Estimator = '" & Environ("Username") & "');"
希望这有帮助。
答案 1 :(得分: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
。