Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 将GUID参数添加到sql字符串_Tsql - Fatal编程技术网

Tsql 将GUID参数添加到sql字符串

Tsql 将GUID参数添加到sql字符串,tsql,Tsql,我在向sql字符串添加guid类型和执行查询时遇到了麻烦。我必须为此编写sql语句,因为我需要将名称数据库作为参数传递 下面的代码是我试图做的,但它不起作用。无论我做什么,它都无法正确读取GUID。在执行存储过程时,它给出了以下错误。可能是因为guid中有- “-”附近的语法不正确 代码如下: ALTER PROCEDURE [dbo].[templatesAndBaskets_Select] @guid uniqueidentifier, @DatabaseName varchar(50)

我在向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

您可能只需要在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周围没有单引号是无效的

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

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

这行吗???

将@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

@我更新了问题。存储的进程符合要求,但不起作用我尝试运行此程序,但仍然在“-”附近遇到相同的错误语法错误。@NickLaMarca:而且您200%确定您使用了我的修改代码,并在GUID周围加上了额外的单引号??你从打印报表中得到了什么??您能告诉我们吗?我将quid参数更改为varchar并得到以下结果:从pm.templatesAndBaskets中选择soldtoid,其中ordergroupid='B28960DC-607D-4857-8638-00011B665B22'Msg 214,级别16,状态2,过程sp_executesql,第1行过程需要类型为'ntext/nchar/nvarchar'的参数'@statement'。