标签: sql-server-2005

如何插入多条记录并获取标识值?

我正在从另一个表B中将多个记录插入到表A中.是否有办法获取表A记录的标识值并更新表b记录而不执行游标?

Create Table A
(id int identity,
Fname nvarchar(50),
Lname nvarchar(50))

Create Table B
(Fname nvarchar(50),
Lname nvarchar(50),
NewId int)

Insert into A(fname, lname)
SELECT fname, lname
FROM B
Run Code Online (Sandbox Code Playgroud)

我正在使用MS SQL Server 2005.

sql sql-server sql-server-2005

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

where子句中的日期时间

如何在wheresql的子句中选择12/20/2008 ?

服务器是SQL Server 2005.

select * from tblErrorLog
where errorDate = '12/20/2008'
Run Code Online (Sandbox Code Playgroud)

sql sql-server datetime sql-server-2005 filter

54
推荐指数
5
解决办法
36万
查看次数

嵌套存储过程包含TRY CATCH ROLLBACK模式?

我对以下模式的副作用和潜在问题很感兴趣:

CREATE PROCEDURE [Name]
AS
BEGIN
    BEGIN TRANSACTION
    BEGIN TRY
        [...Perform work, call nested procedures...]
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION
        RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
    END CATCH
END
Run Code Online (Sandbox Code Playgroud)

据我所知,当使用单个过程时,此模式是合理的 - 过程将完成所有语句而不会出错,或者它将回滚所有操作并报告错误.

但是,当一个存储过程调用另一个存储过程来执行某个子工作单元时(理解为较小的过程有时会单独调用),我看到与回滚有关的问题 - 一条信息性消息(级别16)发表声明The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION..我假设是因为子过程中的回滚总是回滚最外层事务,而不仅仅是子过程中启动的事务.

我确实希望整个事情回滚并在发生任何错误时中止(并且错误报告给客户端作为SQL错误),我只是不确定外层试图回滚事务的所有副作用已经回滚过了.也许@@TRANCOUNT在每个TRY CATCH层进行回滚之前检查一下?

最后是客户端(Linq2SQL),它有自己的事务层:

try
{
    var context = new MyDataContext();
    using (var transaction = new TransactionScope())
    {       
            // Some Linq stuff
        context.SubmitChanges();
        context.MyStoredProcedure();
        transactionComplete();
    }
}
catch
{
    // An …
Run Code Online (Sandbox Code Playgroud)

stored-procedures transactions sql-server-2005 linq-to-sql

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

是否可以在SQL Server中强制执行行级锁定?

我可以看到如何关闭SQL Server中的行级和页级锁定,但我找不到强制SQL Server使用行级锁定的方法.有没有办法强制SQL Server使用行级锁定而不使用页面级锁定?

sql-server sql-server-2005 sql-server-2008 rowlocking

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

SQL Server 2005 - 以编程方式导出表(运行.sql文件以重建它)

我有一个数据库,有一个表有一些数据的客户

我在办公室有另一个数据库,一切都是一样的,但是我的表客户是空的

我如何在SQL Server 2005(T-SQL)中创建一个带有所有内容的sql文件在桌子上来自第一个数据库的客户,创建一个,比方说,buildcustomers.sql,我压缩该文件,通过网络复制它,在我的SQL Server中执行它瞧!我的表客户已满

我如何为整个数据库执行相同的操作?

sql sql-server sql-server-2005 database-table

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

如何让SQL事件探查器监视触发器执行

我有一个SQL Server Profiler的跟踪设置来监视在数据库上执行的SQL.我最近发现跟踪中不包含触发器执行.在查看跟踪的可用事件之后,我看不到任何看起来像包含触发器执行的事件.有谁知道如何设置跟踪来监控触发器的执行?

sql-server sql-server-2005 sql-server-profiler

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

生成在TSQL中递增日期的结果集

考虑需要创建日期的结果集.我们有开始和结束日期,我们想要生成两者之间的日期列表.

DECLARE  @Start datetime
         ,@End  datetime
DECLARE @AllDates table
        (@Date datetime)

SELECT @Start = 'Mar 1 2009', @End = 'Aug 1 2009'

--need to fill @AllDates. Trying to avoid looping. 
-- Surely if a better solution exists.
Run Code Online (Sandbox Code Playgroud)

考虑使用WHILE循环的当前实现:

DECLARE @dCounter datetime
SELECT @dCounter = @Start
WHILE @dCounter <= @End
BEGIN
 INSERT INTO @AllDates VALUES (@dCounter)
 SELECT @dCounter=@dCounter+1 
END
Run Code Online (Sandbox Code Playgroud)

问题:如何使用T-SQL创建一组在用户定义范围内的日期?假设SQL 2005+.如果您的答案是使用SQL 2008功能,请标记为.

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

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

添加新列后SQL Server无效的列名称

我刚刚通过SSMSDesigner 向现有表添加了一个标识列,表格更新正常,我可以成功运行一个选择查询,但在查询完成后,我注意到新列的下划线为红色,并显示错误这是一个无效的列名.

为什么会这样?如果列无效,我希望查询失败.

SSMS是否保留了必须刷新的旧表的某种内部引用?

我尝试关闭数据库连接并重新打开它,但仍然是同样的错误.不知道我在这里缺少什么.

SELECT TOP 100 
[PRIMARY_NDX_Col1],
[NEW_Col], --QUERY EXECUTES SUCCESSFULLY, BUT THIS IS UNDERLINED RED AS AN INVALID COLUMN
[Col3]
FROM [dbo].[MyTable]
Run Code Online (Sandbox Code Playgroud)

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

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

使用SQL Server在varchar列中查找非ASCII字符

如何使用SQL Server返回包含非ASCII字符的行?
如果你能展示如何为一个列做这件事会很棒.

我现在正在做这样的事情,但它没有用

select *
from Staging.APARMRE1 as ar
where ar.Line like '%[^!-~ ]%'
Run Code Online (Sandbox Code Playgroud)

对于额外的功劳,如果它可以跨越表中的所有 varchar列,那将是非常出色的!在这个解决方案中,返回三列是很好的:

  • 该记录的标识字段.(这将允许使用另一个查询来审核整个记录.)
  • 列名称
  • 带有无效字符的文本
 Id | FieldName | InvalidText       |
----+-----------+-------------------+
 25 | LastName  | Solís             |
 56 | FirstName | François          |
100 | Address1  | 123 Ümlaut street |
Run Code Online (Sandbox Code Playgroud)

无效字符可以是SPACE(32 10)到~(127 10)范围之外的任何字符

t-sql sql-server sql-server-2005 non-ascii-characters

52
推荐指数
5
解决办法
11万
查看次数

参数化查询如何帮助SQL注入?

在查询1和2中,文本框中的文本都插入到数据库中.这里参数化查询的意义是什么?

1.> -------------

SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
Run Code Online (Sandbox Code Playgroud)

2.> --------------

int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
INSERT into Cars values(tagnumber.Text); /* then is it the same? */
Run Code Online (Sandbox Code Playgroud)

此外,在这里我将使用正则表达式验证来停止插入非法字符.

.net c# sql sql-server-2005 parameterized-query

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