标签: sql-server

SqlBulkCopy插入标识列

我正在使用该SqlBulkCopy对象将数百万个生成的行插入到数据库中.唯一的问题是我插入的表有一个标识列.我已经尝试设置SqlBulkCopyOptionsto SqlBulkCopyOptions.KeepIdentity并将标识列设置为0's,DbNull.Valuenull.其中没有一个有效.我觉得我错过了一些非常简单的事情,如果有人能够启发我会很棒.谢谢!

编辑为了澄清,我没有在DataTable我导入中设置的标识值.我希望它们作为导入的一部分生成.

编辑2 这是我用来创建基础SqlBulkCopy对象的代码.

SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity);
sbc.DestinationTableName = LOOKUP_TABLE;

private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options = 
    SqlBulkCopyOptions.Default) 
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi");
    string connString =
    cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString;
    return new SqlBulkCopy(connString, options);
}
Run Code Online (Sandbox Code Playgroud)

c# sql-server sqlbulkcopy identity-insert

62
推荐指数
3
解决办法
7万
查看次数

如何将字节[]插入SQL Server VARBINARY列

我在下面突出显示了一个字节数组,如何将其插入SQL Server数据库Varbinary列?

byte[] arraytoinsert = new byte[10]{0,1,2,3,4,5,6,7,8,9};

string sql = 
    string.format
    (
    "INSERT INTO mssqltable (varbinarycolumn) VALUES ({0});",WHATTODOHERE
    );
Run Code Online (Sandbox Code Playgroud)

先谢谢你们!

sql-server arrays

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

比较T-SQL中的日期,忽略时间部分

我正在使用MS SQL 2005,我想检查两个日期是否相等,但忽略了时间部分.

我知道我可以使用DATEDIFF,但我担心它可能会很慢 - 这个SP在DB中被大量使用!

有什么建议?

编辑:大卫安德烈斯的评论:

"比较"不仅包括"平等"
让我意识到我没有让我的问题足够清楚 - 我实际上只是在检查是否平等,就是这样.

sql t-sql sql-server sql-server-2005

61
推荐指数
3
解决办法
7万
查看次数

你在SQL Server中做什么来创建或改变?

这一年是2009年,SQL Server没有CREATE或ALTER/REPLACE.这就是我所做的.

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES 
           WHERE ROUTINE_NAME = 'SynchronizeRemoteCatalog' 
             AND ROUTINE_SCHEMA = 'dbo' 
             AND ROUTINE_TYPE = 'PROCEDURE')
 EXEC ('DROP PROCEDURE dbo.SynchronizeRemoteCatalog')

CREATE PROCEDURE dbo.SynchronizeRemoteCatalog
AS BEGIN
    -- body
END
Run Code Online (Sandbox Code Playgroud)

对于触发器,您必须依赖于专有系统视图.

在此期间,这是最受欢迎的惯例吗?

编辑:正如n8wrl建议的那样,官方消息表明此功能不是高优先级.因此问题.

sql t-sql sql-server

61
推荐指数
5
解决办法
6万
查看次数

SQL连接表命名约定

我有2个表:用户和角色,我有一个表将这些表连接在一起.连接表中唯一的东西是链接2个表的ID.

我该怎么称呼这张桌子?我从来没有真正看到过这个很好的命名惯例.

我以前见过的约定:

  • UsersToRolesJoin
  • UsersToRolesLink
  • UsersToRolesMembership
  • UsersRoles

例如:

Users:  
Id  
Name

Roles:  
Id  
Name  

TableThatJoinsTheTwo:  
Id  
UserId  
RoleId  
Run Code Online (Sandbox Code Playgroud)

sql sql-server naming-conventions

61
推荐指数
7
解决办法
3万
查看次数

如何在单个结果集中列出SQL Server中所有数据库中的所有表?

我正在寻找T-SQL代码来列出SQL Server中所有数据库中的所有表(至少在SS2005和SS2008中;最好也适用于SS2000).然而,问题是,我想要一个结果集.这排除了Pinal Dave的优秀答案:

sp_msforeachdb 'select "?" AS db, * from [?].sys.tables'
Run Code Online (Sandbox Code Playgroud)

上面的存储过程为每个数据库生成一个结果集,如果你在像SSMS这样可以显示多个结果集的IDE中,这很好.但是,我想要一个结果集,因为我想要一个本质上是"查找"工具的查询:如果我添加一个像这样的子句,WHERE tablename like '%accounts'它会告诉我在哪里可以找到我的BillAccounts,ClientAccounts和VendorAccounts表,无论它们驻留在哪个数据库中在.


2010.05.20更新,约20分钟后......

到目前为止,Remus的回答看起来最有趣.我发布了一个版本的修改版本,包括数据库名称和示例过滤器子句,而不是将其作为答案发布并将其授予自己.看起来Remus会在这一点上获得答案!

declare @sql nvarchar(max);
set @sql = N'select b.name as "DB", a.name collate Latin1_General_CI_AI as "Table", object_id, schema_id, cast(1 as int) as database_id  from master.sys.tables a join sys.databases b on database_id=1 where a.name like ''account%''';

select @sql = @sql + N' union all select b.name as "DB", a.name collate Latin1_General_CI_AI, object_id, schema_id, ' + cast(database_id as …
Run Code Online (Sandbox Code Playgroud)

sql-server metadata

61
推荐指数
3
解决办法
9万
查看次数

使用默认值将Nullable列更改为NOT NULL

今天我遇到了一个旧表,其中一个名为"Created"的日期时间列允许空值.现在,我想要更改它,使其为NOT NULL,并且还包含一个约束以添加默认值(getdate()).

到目前为止,我已经得到了以下脚本,只要我事先清理了所有空值,它就可以正常工作:

ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL 
Run Code Online (Sandbox Code Playgroud)

有没有办法在ALTER语句中同时指定默认值?

sql sql-server alter-table alter-column

61
推荐指数
3
解决办法
15万
查看次数

有没有办法获取SQL Server中所有当前临时表的列表?

我意识到临时表是会话/连接绑定的,不可见或可从会话/连接访问.

我有一个长期运行的存储过程,在各个阶段创建临时表.

有没有办法可以看到当前临时表的列表?我需要什么特权才能这样做?

或者,

有没有办法可以看到正在运行的存储过程中执行的特定SQL语句?该过程作为SQL Server中的计划作业运行.

我正在使用SQL Server 2000.

谢谢你的指导.

sql sql-server sql-server-2000 temp-tables

61
推荐指数
3
解决办法
10万
查看次数

T-SQL子串 - 最后3个字符

使用T-SQL,我将如何获取varchar列的最后3个字符?

所以列文本是IDS_ENUM_Change_262147_190我需要的190

sql t-sql sql-server sql-server-2005

61
推荐指数
3
解决办法
13万
查看次数

如何使用Dapper.NET将C#List插入数据库

使用,我如何插入C# List数据库.以前没有dapper我使用下面的代码将List值插入数据库.

try
{                
    connection.Open();

    for (int i = 0; i < processList.Count; i++)
    {
        string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@Id, @st_Time, @ed_Time, @td_Time)";
        command = new SqlCommand(processQuery, connection);
        command.Parameters.Add("Id", SqlDbType.Int).Value = processList[i].ID;
        command.Parameters.Add("st_Time", SqlDbType.DateTime).Value = processList[i].ST_TIME;
        command.Parameters.Add("ed_Time", SqlDbType.DateTime).Value = processList[i].ED_TIME;
        command.Parameters.Add("td_Time", SqlDbType.DateTime2).Value = processList[i].TD_TIME;
        dataReader.Close();
        dataReader = command.ExecuteReader();
    }

    connection.Close();
}
catch (SqlException ex)
{
    //--Handle Exception
}
Run Code Online (Sandbox Code Playgroud)

我熟悉使用dapper获取数据,但这是我第一次尝试使用插入查询.

我尝试了以下代码,使用Exceute链接查询但坚持循环; 我认为使用dapper工具,不需要循环语句.

connection.Execute(processQuery ... …
Run Code Online (Sandbox Code Playgroud)

c# sql-server dapper

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