我正在从另一个表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.
如何在wheresql的子句中选择12/20/2008 ?
服务器是SQL Server 2005.
select * from tblErrorLog
where errorDate = '12/20/2008'
Run Code Online (Sandbox Code Playgroud) 我对以下模式的副作用和潜在问题很感兴趣:
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) 我可以看到如何关闭SQL Server中的行级和页级锁定,但我找不到强制SQL Server使用行级锁定的方法.有没有办法强制SQL Server使用行级锁定而不使用页面级锁定?
我有一个数据库,有一个表有一些数据的客户
我在办公室有另一个数据库,一切都是一样的,但是我的表客户是空的
我如何在SQL Server 2005(T-SQL)中创建一个带有所有内容的sql文件在桌子上来自第一个数据库的客户,创建一个,比方说,buildcustomers.sql,我压缩该文件,通过网络复制它,在我的SQL Server中执行它瞧!我的表客户已满
我如何为整个数据库执行相同的操作?
我有一个SQL Server Profiler的跟踪设置来监视在数据库上执行的SQL.我最近发现跟踪中不包含触发器执行.在查看跟踪的可用事件之后,我看不到任何看起来像包含触发器执行的事件.有谁知道如何设置跟踪来监控触发器的执行?
考虑需要创建日期的结果集.我们有开始和结束日期,我们想要生成两者之间的日期列表.
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功能,请标记为.
我刚刚通过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 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)范围之外的任何字符
在查询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)
此外,在这里我将使用正则表达式验证来停止插入非法字符.
sql-server-2005 ×10
sql-server ×8
sql ×6
t-sql ×3
.net ×1
c# ×1
database ×1
datetime ×1
filter ×1
linq-to-sql ×1
rowlocking ×1
transactions ×1