将数据类型nvarchar转换为uniqueidentifier时出错

时间:2016-01-05 11:10:07

标签: python sql stored-procedures

我正在尝试从python运行MSSQL过程。基本上我的python脚本只执行一个名为" my_proc"的存储过程。使用这部分代码

sql_query = """
    use my_db        
    exec dbo.my_proc
"""

res = common.execute_sql(SERVER, USERNAME, PASSWORD, sql_query)

程序 my_proc 看起来像这样

USE [my_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[my_proc] 
AS
BEGIN
  DECLARE @ID NVARCHAR(32) = N'f17584bd-1b19-4847-a9c7-b1560054de69';
  SELECT @ID, CONVERT(uniqueidentifier, @ID);

  EXEC msdb.dbo.sp_start_job @job_id = ID      
END

但是,在运行脚本时我收到错误:

将数据类型nvarchar转换为uniqueidentifier

时出错

因此,看起来像 BEGIN 下面的部分,从nvarchar到uniquetradeidentifer的转换发生,失败。

我也试过

DECLARE @ID uniqueidentifier
SET @ID = CAST( 'f17584bd-1b19-4847-a9c7-b1560054de69' as uniqueidentifier )

但有同样的错误。

这里有什么问题?

最初我有

EXEC msdb.dbo.sp_start_job @job_id = 'f17584bd-1b19-4847-a9c7-b1560054de69'

在sql级别执行过程时有效,但是当使用我的python脚本运行该过程时,我收到错误:

指定的@job_id(' F17584BD-1B19-4847-A9C7-B1560054DE69')不存在

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我在SSMS中尝试过您的SQL代码。 这是不可能的,因为您使用@ID NVARCHAR(32)但字符串长度更长。请改用@ID NVARCHAR(36)。