将GUID参数添加到sql字符串

时间:2012-02-27 16:31:46

标签: tsql

我在为sql字符串添加guid类型并获取查询时遇到了麻烦。我必须编写sql,因为我需要将名称数据库作为参数传递。

以下代码是我正在尝试做的但它不起作用。无论我做什么,它都无法正确读取GUID。它在执行存储过程时给出了以下错误。可能是因为guid中有“ - ”

  

' - '附近的语法不正确。

以下是代码:

ALTER PROCEDURE [dbo].[templatesAndBaskets_Select]
 @guid uniqueidentifier,
 @DatabaseName varchar(50)
AS
BEGIN
Declare @sql varchar(max)

Set @sql=

'select soldtoid 
from '    +  @DatabaseName + '.templatesAndBaskets' +
' where ordergroupid = ' +  CONVERT(varchar(max),@guid)

print @sql
EXECUTE SP_EXECUTESQL @sql
END

2 个答案:

答案 0 :(得分:5)

您可能只需要在GUID周围添加单引号:

SET @sql =
   N'SELECT soldtoid FROM ' +  @DatabaseName + N'.templatesAndBaskets' +
   N' WHERE ordergroupid = ''' +  CONVERT(nvarchar(max), @guid) + N''''

这应该会产生类似这样的SQL语句:

SELECT soldtoid FROM database.templatesAndBaskets
WHERE ordergroupid = '5E736CE7-5527-40ED-8499-2CA93FC7BC9C'

这是有效的 - 你的GUID周围没有单引号是无效的......

更新:您还需要将@sql变量更改为NVARCHAR sp_Executesql - 尝试此操作:

ALTER PROCEDURE [dbo].[templatesAndBaskets_Select]
    @guid uniqueidentifier,
    @DatabaseName NVARCHAR(50)
AS
BEGIN
   DECLARE @sql NVARCHAR(MAX)

   SET @sql =
       N'SELECT soldtoid FROM ' +  @DatabaseName + N'.templatesAndBaskets' +
       N' WHERE ordergroupid = ''' +  CONVERT(nvarchar(max), @guid) + N''''

   PRINT @sql
   EXECUTE sp_ExecuteSQL @sql
END

这有用吗?

答案 1 :(得分:0)

将@guid放在'

之间
ALTER PROCEDURE [dbo].[templatesAndBaskets_Select]
 @guid uniqueidentifier,
 @DatabaseName varchar(50)
AS
BEGIN
Declare @sql varchar(max)

Set @sql=

"select soldtoid from "    +  @DatabaseName + ".templatesAndBaskets" +
" where ordergroupid = '" +  CONVERT(varchar(max),@guid)+"'"

print @sql
EXECUTE SP_EXECUTESQL @sql
END