SQL Server:创建存储过程
我需要编写一个存储过程,将SQL Server:创建存储过程,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我需要编写一个存储过程,将CustomerID作为参数,并从atbv_Contacts返回Name,其中ContactID列的参数与CustomerID相同 我的问题是,我想我只是想获取ID,因此它不会向我显示客户的ID。此外,我认为此过程编写不正确,因为我遇到以下错误: Msg 3609,16级,状态2,程序atsp_GetNameID,第7行 事务在触发器中结束。批处理已中止 Msg 50000,18级,状态1,程序数据库变更日志,第90行 无效的对象名。请检查是否有打字错误 我当前的代码:
CustomerID
作为参数,并从atbv_Contacts
返回Name
,其中ContactID
列的参数与CustomerID
相同
我的问题是,我想我只是想获取ID,因此它不会向我显示客户的ID。此外,我认为此过程编写不正确,因为我遇到以下错误:
Msg 3609,16级,状态2,程序atsp_GetNameID,第7行事务在触发器中结束。批处理已中止 Msg 50000,18级,状态1,程序数据库变更日志,第90行
无效的对象名。请检查是否有打字错误 我当前的代码:
CREATE PROCEDURE atsp_GetNameID
(@CustomerID AS INT)
AS
BEGIN
SELECT ContactID
FROM atbv_Contacts
WHERE ContactID LIKE '%' + @CustomerID + '%'
END
换成这个
CREATE PROCEDURE atsp_GetNameID
(@CustomerID AS INT)
AS
BEGIN
SELECT ContactID
FROM atbv_Contacts
WHERE ContactID =@CustomerID
END
这看起来好像您在名为
strg\u database\u ChangeLog
的数据库中有一个DDL触发器,它正在调用RAISERROR
并回滚您的CREATE
尝试。@MartinSmith。有趣的我不知道在解析存储过程之前会调用触发器。有什么建议可以解决这个问题吗?:@佩罗尼测试仪。卸下DDL触发器。或者,在您有更多控制权的数据库中创建存储过程,并且您有权在其中创建存储过程。注意:然后您将得到另一个错误(这在我删除的答案中得到了解决)。@GordonLinoff-The'%'++@CustomerID+'%'
将很好地解析并允许创建过程。将varchar值“%”转换为数据类型int时,转换失败。
将在运行时执行该过程。这既不能解决问题,也不能解决实际错误。