我有一个复杂的过程,将一个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)
您可能只需要在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变量更改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
Run Code Online (Sandbox Code Playgroud)
那样有用吗??