标签: sql-server-2008-r2

如何在SQL Server中使用批量插入编写UTF-8字符?

我正在对sqlserver进行BULK INSERT,并且没有正确地将UTF-8字符插入数据库.数据文件包含这些字符,但在批量插入执行后数据库行包含垃圾字符.

我的第一个疑问是格式文件的最后一行:

10.0
3
1 SQLCHAR  0  0  "{|}"  1 INSTANCEID ""
2 SQLCHAR  0  0  "{|}"  2 PROPERTYID ""
3 SQLCHAR  0  0  "[|]"  3 CONTENTTEXT "SQL_Latin1_General_CP1_CI_AS"
Run Code Online (Sandbox Code Playgroud)

但是,在阅读这个官方页面后,在我看来,这实际上是SQL Server 2008版中的插入操作读取数据文件时的一个错误.我们使用的是版本2008 R2.

这个问题的解决方案是什么,或者至少是一种解决方法?

sql-server bulkinsert utf-8 sql-server-2008-r2

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

SSRS Report Manager javascript在非IE浏览器中针对Drop Down Menus失败

我一直在ReportingServices.js使用Firefox和Firebug 调试该文件.我发现SSRS(SQL Server Reporting Services)报表管理器(报表的Web前端)在Firefox(v7.0.1)中不起作用的原因是它javascript .lastChild用于查找元素.不幸的是,Firefox也会将空白作为TextNode元素,因为元素选择无法按预期工作.

这适用于IE,希望有人知道解决方案.我编辑了javascript以解决一个错误,但后来又打了一个更复杂的错误,所以可能是一个我的字段试图手动修复.希望有一些更新或补丁可用.

这是在Windows 2008 R2 Datacenter服务器上运行SQL Server 2008 R2标准版.

如果您觉得这不是这样一个问题的论坛,请道歉.在这种情况下,如果不合适,请建议我在哪里提出问题.它有点javascript问题,但可能有软件更新解决方案.

更新:

经过几个小时的修复文件中的浏览器兼容性错误后,ReportingServices.js我设法让它在Firefox,Chrome,Opera和Safari以及IE上运行.对不起,我的答案分为两部分; 我发布ReportingServices.js了解决方案更新的完整代码.

javascript reportmanager sql-server-2008-r2 reporting-services ssrs-2008

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

INSERT IF NOT NOT EXISTS但以任何方式返回身份

我有3个表:audioFormats,videoFormats和fileInfo.我有一个事务,当我插入fileInfo表时,该插入包括来自audioFormats和videoFormats的FK.如果音频格式或视频格式不在这些表中,则插入到后面的表中,然后将生成的(或现有的)ID值插入到fileInfo中.

如何仅在该值不存在时才有效地插入值,但是获取值的ID是否已经存在或仅使用SQL(可能是事务)重新插入.

我可以插入一个值,如果它尚不存在:

INSERT INTO audioformats (audioformat)
VALUES(@format)
WHERE NOT EXISTS (SELECT 1 FROM audioformats WHERE audioformat = @format)
Run Code Online (Sandbox Code Playgroud)

我可以从插入中获取插入的ID:

INSERT INTO audioFormats (audioFormat)
VALUES ('Test')
SET @audioFormatId = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

如果没有插入,SCOPE_IDENTITY将不会给我ID值.我可以执行标量查询以在可能的插入后获取标识,但似乎我应该能够使用最多一个SELECT和INSERT完成所有这些操作.

sql sql-server sql-server-2008-r2

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

从触发器发送电子邮件

我正在尝试开发邮件触发器.有人可以协助如何实现这一点,以便当用户插入记录时,它会检查"速度"字段,以便当插入的值超过100时,将邮件发送到指定的地址.

email triggers sql-server-2008-r2

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

在SQL Server 2008 MERGE语法中使用什么?

雅各布问了一个完美的问题:给我MERGE语法.

那里的每一个答案都会立即跳到他们能想到的最复杂的案例中; 用无关的混淆来掩盖语法.

马克给出了答案:

MERGE 
   member_topic AS target
USING 
   someOtherTable AS source
ON 
   target.mt_member = source.mt_member 
   AND source.mt_member = 0 
   AND source.mt_topic = 110
WHEN MATCHED THEN 
   UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN 
   INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
; 
Run Code Online (Sandbox Code Playgroud)

看着这个答案,我和雅各布一样困惑:

我没有someOtherTable

Marc建议这someOtherTable是一个虚拟的占位符值 - 没有那个表并不重要.

我尝试了,SQL Server 确实抱怨

无效的对象名称'someOtherTable'.

这使我努力理解什么USINGUSING foo,如果它不是重要的(除了实际上很重要).

是什么USING时,它的使用使用时我使用SQL Server 2008合并语法?


奖金问题

什么是使用MERGE的UPSERT语法: …

sql-server merge upsert sql-server-2008-r2

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

优化包含窗口函数的参数化T-SQL查询的执行计划

编辑:我已经更新了示例代码并提供了完整的表和视图实现以供参考,但基本问题仍未改变.

我在数据库中有一个相当复杂的视图,我试图查询.当我尝试通过将WHERE子句硬编码为特定外键值从视图中检索一组行时,视图执行速度非常快,并且具有最佳执行计划(正确使用索引等)

SELECT * 
FROM dbo.ViewOnBaseTable
WHERE ForeignKeyCol = 20
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试向查询添加参数时,我的执行计划突然崩溃了.当我运行下面的查询时,我正在获取索引扫描而不是遍布整个地方并且查询性能非常差.

DECLARE @ForeignKeyCol int = 20

SELECT * 
FROM dbo.ViewOnBaseTable
WHERE ForeignKeyCol = @ForeignKeyCol 
Run Code Online (Sandbox Code Playgroud)

我正在使用SQL Server 2008 R2.什么给这里?使用导致次优计划的参数有什么用?任何帮助将不胜感激.

作为参考,这里是我得到错误的对象定义.

CREATE TABLE [dbo].[BaseTable]
(
    [PrimaryKeyCol] [uniqueidentifier] PRIMARY KEY,
    [ForeignKeyCol] [int] NULL,
    [DataCol] [binary](1000) NOT NULL
)

CREATE NONCLUSTERED INDEX [IX_BaseTable_ForeignKeyCol] ON [dbo].[BaseTable]
(
    [ForeignKeyCol] ASC
)

CREATE VIEW [dbo].[ViewOnBaseTable]
AS
SELECT
    PrimaryKeyCol,
    ForeignKeyCol,
    DENSE_RANK() OVER (PARTITION BY ForeignKeyCol ORDER BY PrimaryKeyCol) AS ForeignKeyRank,
    DataCol
FROM
    dbo.BaseTable
Run Code Online (Sandbox Code Playgroud)

我确定窗口函数是问题,但我通过窗口函数分区的单个值过滤我的查询,所以我希望优化器先过滤然后运行窗口函数.它在硬编码示例中执行此操作,但不是参数化示例.以下是两个查询计划.最佳计划是好的,底层计划是坏的.

查询执行计划

t-sql sql-server query-optimization sql-server-2008-r2

20
推荐指数
1
解决办法
6451
查看次数

我无法使用THROW SQL Server 2008 R2

它说,SQL Server 2008 R2 Management Studio无法识别下面的例子

Throw附近的语法错误

我试图在这里抛出一个错误,所以当有人插入两次相同的值时,我可以在我的网站上处理它.

Begin Try
 insert into BusinessID (BusinessID) values (@ID)
 insert into BusinessID (BusinessID) values (@ID)

End Try

Begin Catch

Print 'PK already exist'
THROW
End Catch
Run Code Online (Sandbox Code Playgroud)

sql sql-server try-catch throw sql-server-2008-r2

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

如何将SQL Server 2008 R2数据库从一台计算机复制到另一台计算机

我在SQL Server 2008 R2中有一个数据库,我想将这个数据库复制到另一台机器上.

我该如何制作副本?

我该如何恢复它?

谢谢

sql sql-server-2008-r2

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

SQL Server错误或功能?十进制数转换

在开发过程中遇到了相当奇怪的SQL Server行为.在这里,绝对相同的数字我们有完全相同的公式.唯一的区别是我们如何得到这个数字(4.250).从表,临时表,变量表或硬编码值.在所有情况下,圆角和铸造都是完全相同的.

-- normal table
CREATE TABLE [dbo].[value]
(
[val] [decimal] (5, 3) NOT NULL
) 
INSERT INTO [value] VALUES (4.250 )
SELECT ROUND(CAST(val * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val FROM [value] AS pr

-- inline query from normal table
SELECT * FROM (SELECT ROUND(CAST(val * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val FROM [value] AS pr) a

-- record without table
SELECT ROUND(CAST(4.250 * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2 sql-server-2014 sql-server-2016

20
推荐指数
3
解决办法
1975
查看次数

如何在SQL Server 2008 R2中列出角色成员

我正在使用以下T-SQL从我的SQL Server 2008 R2数据库中获取角色成员:

select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm
  join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
  join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
order by rp.name
Run Code Online (Sandbox Code Playgroud)

当我检查输出时,我注意到列出的唯一角色成员db_datareader是db角色 - db_datareader查询中没有列出任何用户成员.

这是为什么?我怎样才能列出我的数据库角色的用户成员?

我想我也应该问一下这个表是否sys.database_role_members真的包含了一个角色的所有成员?

sql sql-server-2008-r2

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