我正在建立一个数据库更新机制,该机制应该运行sql脚本并将其结果插入到更新日志表中。
我正在使用C#来运行我的脚本并动态设置我应该插入更新日志表的sql消息。
如果脚本中有错误,我会捕获它并使用SqlException.Message将其写入消息。
1
我的脚本看起来像这样(数字和箭头实际上不在脚本中):
if (exception != null)
{
sqlMessage += exception.Message + Environment.NewLine;
break;
}
为了测试目的,我将“Users”更改为“Users_error”以抛出错误(带箭头的行)。
我期待跟随日志(数字对应于脚本中的数字):
1. USE [Database]
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'Users'))
BEGIN
print('Table exists - proceeding to insert');
END
ELSE
BEGIN
-- CREATING TABLE
CREATE TABLE [dbo].[Users](
[UserId] [int] NOT NULL,
[UserFullName] [nvarchar](100) NOT NULL,
[UserName] [nvarchar](100) NOT NULL,
[UserShortName] [nvarchar](50) NOT NULL,
[UserLogin] [varchar](50) NOT NULL
)
2. print 'Created table'
END
3.-> IF(EXISTS(SELECT * FROM [Users_error] WHERE UserId = 1 ))
BEGIN
print('User exists - nothing to insert');
END
ELSE
BEGIN
-- INSERTING USER
INSERT INTO [dbo].[Users]
([UserId]
,[UserFullName]
,[UserName]
,[UserShortName]
,[UserLogin])
VALUES
(1,'System Administrator','Admin','SA', 'SA')
print 'Inserted user'
END
相反,我得到了以下日志:
----- STARTED 2.sql -----
1. Changed database context to 'Database'.
2. Created table
3. Invalid object name 'Users_error'.
----- FINISHED 2.sql -----
有没有办法让它恢复正常秩序?在整个地方调试带有日志消息的脚本会非常烦人。
谢谢!
答案 0 :(得分:0)
Invalid object name 'Users_error'
是编译错误。另外两个是执行消息。批处理的编译在执行之前进行。有关详细信息,请阅读Understanding how SQL Server executes a query。