将GUID参数添加到sql字符串

Nic*_*rca 2 t-sql

我有一个复杂的过程,将一个guid类型添加到sql字符串并获取查询.我必须编写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
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

您可能只需要在GUID周围放置单引号:

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

这应该会导致SQL语句如下:

SELECT soldtoid FROM database.templatesAndBaskets
WHERE ordergroupid = '5E736CE7-5527-40ED-8499-2CA93FC7BC9C'
Run Code Online (Sandbox Code Playgroud)

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

更新:您还需要将@sql变量更改NVARCHARsp_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
Run Code Online (Sandbox Code Playgroud)

那样有用吗??