问题:在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)
我可以列出所有程序集和所有函数/过程,但我似乎无法将程序集与函数/过程相关联...
我有一个文件(有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) 
当我单击确定时出现此错误:

找到一些博客帖子,并在注册表中更改了这一点,但它没有帮助.

任何人都有我可以尝试的其他想法吗?
我已经深入研究了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 Server 2008 - 将XML声明添加到XML输出
如果可能,请告诉我.我在一些博客中读到过
http://forums.asp.net/t/1455808.aspx/1
http://www.devnewsgroups.net/group/microsoft.public.sqlserver.xml/topic60022.aspx
但我无法理解为什么我不能这样做.
我正在使用以下代码创建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失败,因为程序集是为不支持的公共语言运行时版本构建的.
我想检查[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) 我生成了一个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,任何关于我做错的想法?
当将夏威夷报价与字符串函数结合使用时,在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) 我不知道这是否是我使用它们或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