admin

如何登录T-SQL

sql

我正在使用ADO.NET来访问SQL Server 2005,并且希望能够从我正在调用的T-SQL存储过程中进行登录。有可能吗?

使用ADO.NET时,我看不到’print’语句的输出,因为我只想使用日志记录进行调试,所以理想的解决方案是从SysInternals向DebugView发出消息。


阅读 113

收藏
2021-05-10

共1个答案

admin

我通过按照Eric Z Beard的建议编写一个SQLCLR过程来解决此问题。程序集必须使用强名称密钥文件签名。

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static int Debug(string s)
    {
        System.Diagnostics.Debug.WriteLine(s);
            return 0;
        }
    }
}

创建了一个密钥和一个登录名:

USE [master]
CREATE ASYMMETRIC KEY DebugProcKey FROM EXECUTABLE FILE =
'C:\..\SqlServerProject1\bin\Debug\SqlServerProject1.dll'

CREATE LOGIN DebugProcLogin FROM ASYMMETRIC KEY DebugProcKey

GRANT UNSAFE ASSEMBLY TO DebugProcLogin

将其导入到SQL Server:

USE [mydb]
CREATE ASSEMBLY SqlServerProject1 FROM
'C:\..\SqlServerProject1\bin\Debug\SqlServerProject1.dll' 
WITH PERMISSION_SET = unsafe

CREATE FUNCTION dbo.Debug( @message as nvarchar(200) )
RETURNS int
AS EXTERNAL NAME SqlServerProject1.[StoredProcedures].Debug

然后,我能够使用以下命令登录T-SQL过程

exec Debug @message = 'Hello World'
2021-05-10