相关疑难解决方法(0)

GO在SQL Server Management Studio和Transact SQL中有什么用?

使用右键单击"脚本为"菜单创建查询时,SQL Server Management Studio始终插入GO命令.为什么?GO实际上做了什么?

t-sql sql-server ssms

337
推荐指数
8
解决办法
24万
查看次数

我们可以在SQL Transaction中多次使用'GO'吗?

我们可以GO多次使用语句SQL Transaction.我有一个很长的T-SQL脚本,我想在一个SQL Transaction.如果一切顺利,那么我将提交否则将回滚.

但是,在运行该查询时,我得到了错误'create function must be the only statement in the batch'.因为我在创建和删除许多功能和程序.

我没有GO在脚本中的任何地方使用过.我的问题是 - 我可以GO在那个长脚本中使用多次语句.因为,GO创建批处理并且如果第一次成功执行批处理但下次失败则会rollback transaction声明能够实际回滚已经执行的吗?

我的脚本结构如下:

PRINT 'Transaction Started'
BEGIN TRY
    BEGIN TRAN

    Drop Function 
    ....
    ....
    Create Function
    ....
    ....
    Drop Procedure
    ....
    ....
    Lots of statements
    ....
    ....

    COMMIT TRAN
    PRINT 'Transaction Succeeded'
END TRY
BEGIN CATCH
    PRINT 'Transaction Failed'
    IF(@@TRANCOUNT > 0)
        ROLLBACK TRAN
END CATCH
Run Code Online (Sandbox Code Playgroud)

我正在创建此脚本,以便在单个脚本中将一些更改从newDB迁移到oldDB.

sql t-sql sql-server

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

不明白错误消息:必须声明标量变量"@Username".

我有一个简单的脚本更新并显示useraccount.(与管理工作室2010合作)为了防止用户错误,我想在SQL中使用变量(之前从未这样做过).

阅读教程时,它应该像下面的代码示例一样简单,除了我收到错误消息.在网上搜索具有相同错误的人,我最终看到了具有相同错误的非常复杂的代码.有人能给我一个线索吗?

DECLARE @Username nvarchar(256) 
Set @Username = 'theUsername'

UPDATE aspnet_Membership
SET IsLockedOut = 0
WHERE UserId IN (SELECT U.UserId
FROM aspnet_Users as U inner join aspnet_Membership M on U.UserId = M.UserId
WHERE u.UserName = @Username)
GO 
SELECT U.UserId, U.UserName, M.Password, M.IsLockedOut, U.LastActivityDate
FROM aspnet_Users as U inner join aspnet_Membership M on U.UserId = M.UserId
WHERE u.UserName = @Username
Run Code Online (Sandbox Code Playgroud)

消息137,级别15,状态2,行3必须声明标量变量"@Username".

sql

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

如何在pymssql中执行.sql文件

我正在尝试使用pymssql在python中执行一个sql文件,这个文件包含一个BEGIN TRANSACTION,一个COMMIT TRANSACTION和一个END,以及之前和之后的一些安全网.

我正在尝试在内存中打开文件并执行内容:

file = open(options.sqlFile, 'r')
sqlFileContents = file.read()
file.close()

cursor.execute(sqlFileContents)
conn.commit()
Run Code Online (Sandbox Code Playgroud)

但是它给我带来了错误:

pymssql.ProgrammingError: (102, "Incorrect syntax near 'GO'.DB-Lib error message 102, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 102, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 102, severity 1
5:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 102, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message …
Run Code Online (Sandbox Code Playgroud)

python database file pymssql

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

TSQL在存储过程中的互斥访问

多个Web服务器访问SQL Server以获取数字代码,当此代码不存在时,它必须由SQL Server自动生成.

我需要确保即使两个并发调用进入并且代码不存在,也只创建一个代码,并且两个调用都返回相同的代码.所以我必须做这样的事情:

begin lock
  if code exists
    return code
  else
    generate code
    return code
end lock
Run Code Online (Sandbox Code Playgroud)

我一直在阅读关于隔离级别和表锁定的一些内容,但我对这一切都很糟糕.首先,我认为SERIALIZABLE隔离级别是我需要的,但显然它不是.

那么,你将如何在TSQL中实现"锁定"?

非常感谢.

更新:

当我尝试使用示例设置可序列化级别时出现此错误:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE get_code 
AS
BEGIN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    GO
    BEGIN TRANSACTION

    select code from codes where granted is null;
END
GO
Run Code Online (Sandbox Code Playgroud)

消息1018,级别15,状态1,过程get_code,第4行'SERIALIZABLE'附近的语法不正确.如果这是作为表提示的一部分,则现在需要A WITH关键字和括号.有关正确的语法,请参阅SQL Server联机丛书.消息102,级别15,状态1,行5'END'附近的语法不正确.

这是什么意思?

sql-server multithreading synchronization locking sql-server-2005

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

在创建它之后使用表:对象不存在

我在T-SQL中有一个脚本,如下所示:

create table TableName (...)
SET IDENTITY INSERT TableName ON
Run Code Online (Sandbox Code Playgroud)

在第二行我得到错误:

找不到对象"TableName",因为它不存在或您没有权限.

我从Management Studio 2005执行它.当我在这两行之间放置"GO"时,它正在工作.但我想要的是不要使用"GO",因为我希望在完成后将此代码放在我的应用程序中.

所以我的问题是如何在不使用"GO"的情况下完成这项工作,以便我可以从C#应用程序以编程方式运行它.

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

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