小编Aar*_*and的帖子

关闭/终止交易

我有这个公开交易,根据DBCC OPENTRAN:

Oldest active transaction:
SPID (server process ID) : 54
UID (user ID)            : -1
Name                     : UPDATE
LSN                      : (4196:12146:1)
Start time               : Jul 20 2011 12:44:23:590PM
SID                      : 0x01
Run Code Online (Sandbox Code Playgroud)

有没有办法杀死它/滚回去?

sql-server sql-server-2005

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

选择列值已更改的行

假设我有下表:

Value    Time
0        15/06/2012 8:03:43 PM
1        15/06/2012 8:03:43 PM     *
1        15/06/2012 8:03:48 PM 
1        15/06/2012 8:03:53 PM
1        15/06/2012 8:03:58 PM     
2        15/06/2012 8:04:03 PM     *
2        15/06/2012 8:04:08 PM
3        15/06/2012 8:04:13 PM     *
3        15/06/2012 8:04:18 PM
3        15/06/2012 8:04:23 PM
2        15/06/2012 8:04:28 PM     *
2        15/06/2012 8:04:33 PM     
Run Code Online (Sandbox Code Playgroud)

如何选择已加星标的行,Value即已更改的位置?基本上我试图找到时间Value已经改变,所以我可以根据这些时间间隔做其他查询.解决方案不应该依赖于知道ValueTime提前.

在我看来,这应该不是很难(但显然对我来说很难!).

我目前正在使用SQL Server 2008,但如果新窗口/分析功能有用,我可以访问2012.

我尝试在这里调整解决方案http://blog.sqlauthority.com/2011/11/24/sql-server-solution-to-puzzle-simulate-lead-and-lag-without-using-sql-server-2012-解析函数/但我的查询在一小时后没有完成!我认为连接将行大小爆炸到无法管理的东西(或者我搞砸了).

我可以使用C#代码和多个db调用来解决这个问题,但它似乎可以在表值函数或SP中完成,这样可以更好.

此外,Value如果更容易,只有增加的解决方案才行.

sql t-sql select sql-server-2008

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

如何基于另一个表创建表

我想基于另一个表的定义创建一个表.

我来自甲骨文,我通常这样做:

 CREATE TABLE schema.newtable AS SELECT * FROM schema.oldtable;
Run Code Online (Sandbox Code Playgroud)

我似乎无法在SQL Server 2008中执行此操作.

sql-server create-table sql-server-2008

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

域\用户的GRANT语法

我试图只允许一个特定的表访问活动目录用户.我希望他们能够插入,更新,删除等,但仅限于该表.我知道这个命令:

GRANT Insert, Select on Tablename to user
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何让"域\用户"以语法方式工作.我试过了:

GRANT Insert, Select on Tablename to domain\user
Run Code Online (Sandbox Code Playgroud)

但我得到:

消息102,级别15,状态1
'\'附近的语法不正确.

sql-server active-directory grant sql-server-2008

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

CAST和IsNumeric

为什么以下查询会返回"将数据类型varchar转换为bigint时出错"?IsNumeric不能使CAST安全吗?我已经尝试了强制转换中的每个数值数据类型并获得相同的"错误转换..."错误.我不相信结果数字的大小是一个问题,因为溢出是一个不同的错误.

有趣的是,在管理工作室中,结果实际上会在错误返回之前显示在结果窗格中一瞬间.

SELECT CAST(myVarcharColumn AS bigint)  
FROM myTable  
WHERE IsNumeric(myVarcharColumn) = 1 AND myVarcharColumn IS NOT NULL  
GROUP BY myVarcharColumn
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

sql-server sql-server-2005

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

使用高级服务快速,无法创建全文索引

我已经安装了SQL Server 2012 Express Edition高级服务,该服务声明它包含全文索引.这是一个链接,说明这一点:

http://msdn.microsoft.com/en-us/library/cc645993.aspx

我已确认正在运行全文服务,但是当我尝试创建全文目录时,它会失败.我收到消息"此版本的SQL Server不支持全文.(Microsoft.SqlServer.Smo)"

有人有主意吗?

full-text-search sql-server-express sql-server-2012

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

跳过/忽略插入时的重复行

我有以下表格:

DataValue

DateStamp    ItemId   Value
----------   ------   -----
2012-05-22   1        6541
2012-05-22   2        12321
2012-05-21   3        32
Run Code Online (Sandbox Code Playgroud)

tmp_holding_DataValue

DateStamp    ItemId   Value
----------   ------   -----
2012-05-22   1        6541
2012-05-22   4        87
2012-05-21   5        234
Run Code Online (Sandbox Code Playgroud)

DateStamp并且ItemId是主要的关键列.

我正在做一个插件,它会在一天中定期运行(在存储过程中):

insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
Run Code Online (Sandbox Code Playgroud)

这会将数据从保持表(tmp_holding_DataValue)移动到主数据表(DataValue)中.然后截断保持表.

问题是,如示例中所示,保持表可以包含主表中已存在的项.由于密钥不允许重复值,因此过程将失败.

一种选择是在insert proc上放置一个where子句,但主数据表有1000万+行,这可能需要很长时间.

是否还有其他方法可以让程序在尝试插入时跳过/忽略重复项?

t-sql sql-server stored-procedures sql-server-2008

25
推荐指数
3
解决办法
6万
查看次数

右键填充具有可变数量空格的字符串

我有我要用来填充参数框在SSRS 2008年的客户表cust_num是价值的串联cust_namecust_addr将标签.表中的必填字段是:

cust_num     int            PK
cust_name    char(50)       not null
cust_addr    char(50)
Run Code Online (Sandbox Code Playgroud)

SQL是:

select cust_num, cust_name + isnull(cust_addr, '') address
from customers
Run Code Online (Sandbox Code Playgroud)

这给了我参数列表中的这个:

FIRST OUTPUT - ACTUAL
1       cust1              addr1
2       customer2               addr2
Run Code Online (Sandbox Code Playgroud)

这是我的预期,但我想要:

SECOND OUTPUT - DESIRED
1       cust1              addr1
2       customer2          addr2
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

select cust_num, rtrim(cust_name) + space(60 - len(cust_name)) +
                 rtrim(cust_addr) + space(60 - len(cust_addr)) customer
from customers
Run Code Online (Sandbox Code Playgroud)

这给了我第一个输出.

select cust_num, rtrim(cust_name) + replicate(char(32), 60 - len(cust_name)) +
                 rtrim(cust_addr) + replicate(char(32), 60 …
Run Code Online (Sandbox Code Playgroud)

sql-server ssrs-2008

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

BULK INSERT后特殊字符显示不正确

我正在使用BULK INSERT导入CSV文件.CSV文件中的一列包含一些包含分数的值(例如1m½f).

我不需要对分数进行任何数学运算,因为这些值仅用于显示目的,因此我将列设置为nvarchar.该BULK INSERT作品,但是当我SQL中查看记录的部分已被替换一分钱符号(¢),因此显示的文本1m¢f.

我很想知道为什么会这样,以及如何解决问题的任何想法.该BULK INSERT命令是:

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );
Run Code Online (Sandbox Code Playgroud)

sql nvarchar bulkinsert sql-server-2012

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

更改表所有者

我正在尝试更改表的所有者:

sp_changeobjectowner 'OWNER.TABLENAME', 'dbo'
Run Code Online (Sandbox Code Playgroud)

但在执行时我收到错误消息:

消息15001,级别16,状态1,过程sp_changeobjectowner,行62
对象'OWNER.TABLENAME'不存在或不是此操作的有效对象.

sql-server sql-server-2008

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