Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Ngăn quyền truy cập sử dụng danh tính sai khi thêm vào bảng được liên kết trên máy chủ SQL

Một dấu vết ODBC cho thấy Access thực sự đang gọi SELECT @@IDENTITY (trái ngược với SCOPE_IDENTITY() ) sau khi chèn hàng vào bảng được liên kết của SQL Server:

Database1       e00-1490    EXIT  SQLExecDirectW  with return code 0 (SQL_SUCCESS)
        HSTMT               0x00000000004D6990
        WCHAR *             0x000000000F314F28 [      -3] "INSERT INTO  "dbo"."Table1"  ("txt") VALUES (?)\ 0"
        SDWORD                    -3

...

Database1       e00-1490    EXIT  SQLExecDirectW  with return code 0 (SQL_SUCCESS)
        HSTMT               0x00000000004D6990
        WCHAR *             0x000007FED7E6EE58 [      -3] "SELECT @@IDENTITY\ 0"
        SDWORD                    -3

Hơn nữa, hành vi này dường như phụ thuộc vào trình điều khiển ODBC đang được sử dụng, vì một thử nghiệm tương tự với MySQL Connector / ODBC cho thấy Access không gọi hàm MySQL tương ứng LAST_INSERT_ID() sau khi chèn một hàng vào bảng được liên kết MySQL.

Cho rằng Access đang gọi SELECT @@IDENTITY , chúng tôi phải sửa đổi trình kích hoạt của mình như sau (nguồn: tại đây ) để đặt lại giá trị @@ IDENTITY trở lại giá trị ban đầu của nó

create trigger mytable_insert_trigger on mytable for insert as

declare @identity int
declare @strsql varchar(128)

set @[email protected]@identity
--your code
--insert into second table ...
--your code
set @strsql='select identity (int, ' + cast(@identity as varchar(10)) + ',1) as id into #tmp'
execute (@strsql)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giao diện mạng SQL Server:Chuỗi kết nối không hợp lệ [87]

  2. Thực thi truy vấn trên SQL Server Analysis Services với IronPython

  3. Làm cách nào để thêm cột nhận dạng mới vào bảng trong SQL Server?

  4. CẤP THỰC HIỆN cho tất cả các thủ tục được lưu trữ

  5. Làm cách nào để tạo khóa chính làm AUTOINCREMENT