【发布时间】:2019-02-26 12:55:24
【问题描述】:
我创建了一个存储过程,它将有两个查询,这两个查询将更新两个表中的记录。
所以我会提到它显示的内容
我的程序如下
ALTER PROC UpdateMissingItemONPoe
@StoreID INT,
@Name VARCHAR(20)
AS
BEGIN
DECLARE @UpdateRec NVARCHAR(MAX) = '';
DECLARE @StoreIP SYSNAME = ''
SET @StoreIP = CASE @StoreID
WHEN 1111 THEN '[192.168.1.45].[Store1].[dbo]'
WHEN 2222 THEN '[192.168.2.45].[Store2].[dbo]'
WHEN 3333 THEN '[192.168.3.45].[Store3].[dbo]'
END
SET @UpdateRec = N' IF((SELECT NameID from '+@StoreIP+'.Details WHERE Name = '''+@Name+''') = 2 )
BEGIN
INSERT INTO ' + @StoreIP + '.PurchaseOrderEntry(
/* InsertField Name */
)
select
Name,
Standard,
Department,
Category,
SubDescription,
Rank
from
'+@StoreIP+'.Details
where
Name = '''+@Name+'''
INSERT INTO '+@StoreIP+'.HeadQuarter(
/* InsertField Name */
)
select
Name,
Standard,
Department,
Category,
SubDescription,
Rank
from
'+@StoreIP+'.Details
where
Name = '''+@Name+'''
END'
print @UpdateRec
EXEC sp_executesql @UpdateRec
END
当我执行这个存储过程时,它没有显示任何错误消息。但是,当我打印时,该动态查询没有完整的查询。
打印出来的查询是这样的
INSERT INTO '+@StoreIP+'.PurchaseOrderEntry(
/* InsertField Name */
)
select
Name,
Standard,
Department,
Category,
SubDescription,
Rank
from
'+@StoreIP+'.Details
where
Name = '''+@Name+'''
INSERT INTO '+@StoreIP+'.HeadQuarter(
/* InsertField Name */
)
select
Name,
Standard,
Department,
Category,
剩下的行不见了
【问题讨论】:
-
@marc_s 你有什么想法吗?
-
@UpdateRec的长度是多少?print @UpdateRec可能无法打印出@UpdateRec中的所有内容,以SSMS中的设置为准 -
@Squirrel 我提到过。那是
NVarchar(MAX) -
无法在 SQL Server 2016 上重现 - 打印输出正确显示 (a)
@StoreIP被替换为来自CASE的正确预期值,并且输出包含 all 线条..... -
@Liamneesan,不仅打印的查询被截断,
IF语句丢失并且变量没有正确连接。您发布的代码将无条件包含该代码并按我的预期运行。我怀疑您实际执行的过程与您问题中的过程不同。
标签: sql sql-server stored-procedures dynamic sp-executesql