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时,
转换失败。
将在运行时执行该过程。这既不能解决问题,也不能解决实际错误。