zoukankan      html  css  js  c++  java
  • SQL Server ->> CLR编程问题汇总

    1) CLR不支持C#类方法重载(Method Overload) 

    今天打算写个枚举目录的C# CLR存储过程,结果发现原来CLR不支持方法重载.

    Msg 6572, Level 16, State 1, Procedure GetFileList, Line 12
    More than one method, property or field was found with name 'GetFileList' in class 'StoredProcedures.EnumerateSourceFileDirectory' in assembly 'XXXXXX'. Overloaded methods, properties or fields are not supported.

    2) SqlString类型对应的是NVARCHAR而不是VARCHAR

    CREATE PROCEDURE GetFileList
    (
        @SourceFolder NVARCHAR(2000),
        @BeginModDate DATETIME,
        @EndModDate DATETIME,
        @FileExtension NVARCHAR(50),
        @FileNamePattern NVARCHAR(2000),
        @IsSubfolderScanned SMALLINT
    )
    AS EXTERNAL NAME XXXX_CLR_Lib.[StoredProcedures.EnumerateSourceFileDirectory].GetFileListByBeginAndEnd;

    Msg 6552, Level 16, State 3, Procedure GetFileList, Line 12
    CREATE PROCEDURE for "GetFileList" failed because T-SQL and CLR types for parameter "@SourceFolder" do not match.

    3) SQL Server中使用CLR的先决条件。 BTW,如果想要操作诸如想文件系统级别的东西,比如枚举文件目录的文件或写日志记录到Windows Event Log中,在创建ASSEMBLY的时候就必须把PERMISSION设为EXTERNAL_ACCESS.

    --TRUSTWORTHY is required to be turned on
    ALTER DATABASE [XXXXXX] SET TRUSTWORTHY ON
    GO
    
    --enable clr feature
    EXEC sp_configure 'show advanced option', 1
    GO
    
    RECONFIGURE
    GO
    
    EXEC sp_configure 'clr enabled', 1
    GO
    
    RECONFIGURE
    GO
    
    /*keep user database owner the same as master database, or it will receive an error
    
    Msg 33009, Level 16, State 2, Line 2
    The database owner SID recorded in the master database differs from the database owner SID recorded in database ''. You should correct this situation by resetting the owner of database '' using the ALTER AUTHORIZATION statement.
    **/
    DECLARE @Command VARCHAR(MAX) = 'ALTER AUTHORIZATION ON DATABASE::<<DatabaseName>> TO 
    [<<LoginName>>]' 
    
    SELECT @Command = REPLACE(REPLACE(@Command 
                , '<<DatabaseName>>', SD.Name)
                , '<<LoginName>>', SL.Name)
    FROM master..sysdatabases SD 
    JOIN master..syslogins SL ON  SD.SID = SL.SID
    WHERE  SD.Name = DB_NAME()
    
    --PRINT @Command
    EXEC(@Command)
  • 相关阅读:
    [转]史上最最佳软件开发实践指导
    附微信表情代码关键字
    TFS2010配置篇 — 万事具备只欠外网访问
    ASP.NET在IE10中Form表单身份验证失效问题解决方法
    TFS2010 更改已经登录的用户
    TFS命令tf:undo 强制签入别人签出的文件
    ASP.NET Core部署后报错: Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.4, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
    SQL 增删改查语句
    存储过程拼接sql
    sql 求时间差
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/4859187.html
Copyright © 2011-2022 走看看