我有一个c#方法,它针对数据库运行sql命令,看起来像这个
public DataTable RunSqlDataTable(string sql, string returnTableName = null)
{
if (!string.IsNullOrEmpty(sql))
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
connection.Open();
DataTable table = new DataTable();
if (!string.IsNullOrEmpty(returnTableName))
table.TableName = returnTableName;
// Execute reader allows for the primary key to be retrieved
using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo))
{
table.Load(reader);
}
return table;
}
}
}
return null;
}
我首先使用此代码运行代码
string slq = @"CREATE TABLE TestTable(
[Id] int NOT NULL ,
[col1] int NOT NULL
);"
sqlHelper.RunSqlDataTable(sql);
然后我跑
sql = @"CREATE TRIGGER [trg_TestTable]
ON [TestTable]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
IF EXISTS(SELECT * FROM inserted)
BEGIN
INSERT OtherTable(A, B, C)
SELECT 'XXX', inserted.Id, getdate()
FROM inserted
END
IF EXISTS(SELECT * FROM deleted)
BEGIN
INSERT OtherTable(A,B,C)
SELECT 'XXX', deleted.Id, getdate()
FROM deleted
END
END;
sqlHelper.RunSqlDataTable(sql);
但是第二行引发异常
'CREATE TRIGGER'必须是查询批处理中的第一个语句。
这被提炼到仍然存在问题的最小值。
在实际的代码中,我创建索引和外键和约束,然后在最终添加触发器的所有情况下,它只是引发异常的触发器。
我不能使用GO,因为那是无效的T-Sql。我正在使用.net 4.5
为什么我得到异常,因为CREATE TRIGGER sql是该命令中唯一的查询?
此致 尼克