我在为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
答案 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