Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / @@SPID в триггере / 4 сообщений из 4, страница 1 из 1
14.12.2001, 11:59
    #32018980
Tagir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@@SPID в триггере
В таблице в триггере отслеживаю клиентов, которые обновляли эту таблицу и заношу их в другую таблицу-протокол. Но @@SPID в триггере указывает всегда только на одного клиента - хозяина (?). Это SQL 7.
По моему я где-то уже встречал на форуме такую ситуацию, но не нашёл.
Спасибо.
...
Рейтинг: 0 / 0
14.12.2001, 12:41
    #32018985
Pandre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@@SPID в триггере
@@SPID идентифицирует не пользователя, а текущий пользовательский процесс, этот номер динамически назначается сервером при каждом коннекте. Для идентификации пользователя по номеру надо использовать SUSER_SID() или USER_ID().
...
Рейтинг: 0 / 0
14.12.2001, 12:42
    #32018986
Alexander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@@SPID в триггере
SQL rabotaet v etom otnoshenii is ruk von ploho. Est' funktsija HOST_ID() no ona ispol'zuet PID operatsionnoi sistemy i vozvraschaet varchar(, a dlja PID v W95 zadeistvovano 10 - potomu rezul'tat nepredskazuem. Chasche vsego eto *.

Luchshe vsego ispol'zovat' VB.


Option Compare Database
Option Explicit

Public UserID As String
Public ComputerID As String

Public Declare Function GetComputerName Lib "Kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

Public Const MAX_COMPUTERNAME_LENGTH As Long = 15&

Public Declare Function WNetGetUser& Lib "Mpr" Alias "WNetGetUserA" _
(lpName As Any, ByVal lpUserName$, lpnLength&)

Public Function GetMachineName() As String
Dim lSize As Long
Dim sBuffer As String

sBuffer = Space$(MAX_COMPUTERNAME_LENGTH + 1)
lSize = Len(sBuffer)

If GetComputerName(sBuffer, lSize) Then
GetMachineName = Left$(sBuffer, lSize)
End If

End Function

Public Function GetWinUserName() As String
Dim cbusername As Long, UserName As String
Dim ret As Long

UserName = ""
UserName = Space(256)
cbusername = Len(UserName)
ret = WNetGetUser(ByVal 0&, UserName, cbusername)

If ret = 0 Then ' ret=0 - Success
GetWinUserName = Left(UserName, InStr(UserName, Chr(0)) - 1)
Else
GetWinUserName = "UnknownUser"
End If

End Function

Public Function GetUserAndComputerID()

UserID = GetWinUserName()
ComputerID = GetMachineName()

Debug.Print UserID
Debug.Print ComputerID

End Function

No copyright! Free to use!

Alexander
...
Рейтинг: 0 / 0
14.12.2001, 14:19
    #32019000
Tagir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@@SPID в триггере
Спасибо, получилось.
Сработал даже просто USER_NAME().
Нашёл работающие нормально с USER_NAME() PC и нашёл разницу в правах с неработающим. Оказалось, что надо убрать везде (в EM и Active Directory) права Administrators и оставить Domain Computers и Users. Правда причины этого непонятны.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / @@SPID в триггере / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]