小编Sol*_*zky的帖子

SQL Server:如何列出所有CLR函数/过程/对象以进行汇编

问题:在SQL Server 2005中,如何列出使用程序集xy的所有SQL CLR函数/过程(例如MyFirstUdp)?

例如,为查询参数MyFirstUdp列出HelloWorld的函数

CREATE PROCEDURE HelloWorld
AS EXTERNAL NAME MyFirstUdp.[SQL_CLRdll.MySQLclass].HelloWorld
GO
Run Code Online (Sandbox Code Playgroud)

我跑了之后

CREATE ASSEMBLY MyFirstUdp FROM 'C:\Users\username\Documents\Visual Studio 2005\Projects\SQL_CLRdll\SQL_CLRdll\bin\Debug\SQL_CLRdll.dll
Run Code Online (Sandbox Code Playgroud)

我可以列出所有程序集和所有函数/过程,但我似乎无法将程序集与函数/过程相关联...

sql-server sql-server-2005 sqlclr

30
推荐指数
4
解决办法
4万
查看次数

如何在最短的时间内插入1000万条记录?

我有一个文件(有1000万条记录),如下所示:

    line1
    line2
    line3
    line4
   .......
    ......
    10 million lines
Run Code Online (Sandbox Code Playgroud)

所以基本上我想在数据库中插入1000万条记录.所以我读了文件并将其上传到SQL Server.

C#代码

System.IO.StreamReader file = 
    new System.IO.StreamReader(@"c:\test.txt");
while((line = file.ReadLine()) != null)
{
    // insertion code goes here
    //DAL.ExecuteSql("insert into table1 values("+line+")");
}

file.Close();
Run Code Online (Sandbox Code Playgroud)

但插入需要很长时间.如何使用C#在尽可能短的时间内插入1000万条记录?

更新1:
批量插入:

BULK INSERT DBNAME.dbo.DATAs
FROM 'F:\dt10000000\dt10000000.txt'
WITH
(

     ROWTERMINATOR =' \n'
  );
Run Code Online (Sandbox Code Playgroud)

我的表如下:

DATAs
(
     DatasField VARCHAR(MAX)
)
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误:

Msg 4866,Level 16,State 1,Line 1
批量加载失败.第1行第1列的数据文件中的列太长.验证是否正确指定了字段终止符和行终止符.

消息7399,级别16,状态1,行1
链接服务器"(null)"的OLE DB提供程序"BULK"报告错误.提供商未提供有关错误的任何信息.

消息7330,级别16,状态2,行1
无法从OLE DB提供程序"BULK"获取链接服务器"(null)"的行.

下面的代码工作:

BULK INSERT DBNAME.dbo.DATAs
FROM 'F:\dt10000000\dt10000000.txt'
WITH
(
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR …
Run Code Online (Sandbox Code Playgroud)

c# sql-server import bulkinsert table-valued-parameters

26
推荐指数
2
解决办法
1万
查看次数

如何在SQL Server Management Studio中更改LocalDB的"数据库默认位置"?

  1. 在SSMS中连接到LocalDB
  2. 打开服务器属性 - >数据库设置 在此输入图像描述
  3. 更改数据/日志/备份位置 - >单击"确定"

当我单击确定时出现此错误: 在此输入图像描述

找到一些博客帖子,并在注册表中更改了这一点,但它没有帮助. 在此输入图像描述

任何人都有我可以尝试的其他想法吗?

sql-server ssms localdb sql-server-2012-express

21
推荐指数
2
解决办法
5338
查看次数

无法在SQL中创建ASSEMBLY

我已经深入研究了SQL clr编程.不幸的是,我的第一次尝试很困难.我的C#汇编代码就是这样:

enter code here
public partial class FirstCLRRoutines
{
    public static int GetCLRFrameworkMajorVersion()
    {
        return System.Environment.Version.Major;
    }
}
Run Code Online (Sandbox Code Playgroud)

而SQL代码是:

USE master
GO
CREATE ASSEMBLY [Chapter2.FirstCLRRoutine]
FROM 'D:\projeler\SQL_CLR\SQL_CLR\bin\Debug\SQL_CLR.dll'
Run Code Online (Sandbox Code Playgroud)

但是我从MSSMSE收到此错误消息:

Msg 6218,Level 16,State 3,Line 1
CREATE ASSEMBLY for assembly'SQL_CLR'失败,因为程序集'SQL_CLR'验证失败.检查引用的程序集是否是最新的并且在数据库中是否可信(对于external_access或unsafe).CLR Verifier错误消息(如果有)将遵循此消息

sql sql-server sqlclr

20
推荐指数
2
解决办法
2万
查看次数


使用sql server 2008中.net framework 4.0创建的dll创建CLR存储过程.显示错误

我正在使用以下代码创建CLR存储过程.我正在创建程序集.它显示了以下问题.我的目标框架是4.0.sql server是2008 r2

SQL代码:

create assembly SampleSearch from 'E:\CLR Files\Sample\ElasticSearch.dll'
Run Code Online (Sandbox Code Playgroud)

错误信息:

程序集"ElasticSearch"的CREATE ASSEMBLY失败,因为程序集是为不支持的公共语言运行时版本构建的.

.net c# sql-server sqlclr

19
推荐指数
1
解决办法
1万
查看次数

drop exists如果存在并创建

我想检查[tbl]上是否存在触发器并创建另一个触发器.我试过这种方式,但没有奏效.我究竟做错了什么?

IF EXISTS (SELECT * FROM sys.objects WHERE [name] = '[dbo].[trg]' AND [type] = 'TR')
      DROP TRIGGER [dbo].[trg] ON [dbo].[tbl]
GO
CREATE TRIGGER [dbo].[trg] ON [dbo].[tbl] 
AFTER DELETE
AS
BEGIN
   //
END
GO
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server triggers sql-server-2008

19
推荐指数
2
解决办法
3万
查看次数

TSQL md5哈希与C#.NET md5不同

我生成了一个md5哈希,如下所示:

DECLARE @varchar varchar(400) 

SET @varchar = 'è'

SELECT CONVERT(VARCHAR(2000), HASHBYTES( 'MD5', @varchar ), 2)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

785D512BE4316D578E6650613B45E934
Run Code Online (Sandbox Code Playgroud)

但是使用以下方法生成MD5哈希:

System.Text.Encoding.UTF8.GetBytes("è")
Run Code Online (Sandbox Code Playgroud)

产生:

0a35e149dbbb2d10d744bf675c7744b1
Run Code Online (Sandbox Code Playgroud)

C#.NET方法中的编码设置为UTF8,我假设varchar也是UTF8,任何关于我做错的想法?

.net t-sql sql-server unicode encoding

16
推荐指数
1
解决办法
8617
查看次数

特殊字符(夏威夷人'Okina)导致奇怪的弦乐行为

当将夏威夷报价与字符串函数结合使用时,在T-SQL中有一些奇怪的行为。这里发生了什么?我想念什么吗?其他角色也会遭受同样的问题吗?

SELECT UNICODE(N'?') -- Returns 699 as expected.

SELECT REPLACE(N'"?', '"', '_') -- Returns "?, I expected _?

SELECT REPLACE(N'a?', 'a', '_') -- Returns a?, I expected _?

SELECT REPLACE(N'"?', N'?', '_') -- Returns __, I expected "_

SELECT REPLACE(N'-', N'?', '_') -- Returns -, I expected -
Run Code Online (Sandbox Code Playgroud)

另外,在LIKE例如中使用时很奇怪:

DECLARE @table TABLE ([Name] NVARCHAR(MAX))
INSERT INTO
    @table
VALUES
    ('John'),
    ('Jane')

SELECT
    *
FROM
    @table
WHERE
    [Name] LIKE N'%?%' -- This returns both records. I expected none.
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server unicode collation

14
推荐指数
1
解决办法
427
查看次数

表值参数性能的问题

我不知道这是否是我使用它们或Microsoft的实现的问题,但SQL 2008表值参数非常缓慢.

一般来说,如果我需要使用TVP,那是因为我有很多记录 - 目前它们似乎比最少的记录速度慢得多.

我在.Net中调用它们是这样的:

// get the data
DataTable data = GetData();

com.CommandText = "sprocName"

// create the table-value parameter
var tvp = com.Parameters.AddWithValue("data", data);
tvp.SqlDbType = SqlDbType.Structured;

com.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

我运行探查器来查看原因,实际的SQL语句是这样的:

declare @data table ...

insert into @data ( ... fields ... ) values ( ... values ... )
-- for each row
insert into @data ( ... fields ... ) values ( ... values ... )

sprocName(@data)
Run Code Online (Sandbox Code Playgroud)

尽管如此,这是一个非常缓慢的方法.如果这样做会更快:

insert into @data ( ... fields ... ) 
values ( …
Run Code Online (Sandbox Code Playgroud)

.net sql-server performance sql-server-2008 table-valued-parameters

13
推荐指数
2
解决办法
5208
查看次数