注意:我正在SQL Server 2008 R2下运行...
我花了一些时间阅读本网站以及其他网站上数十篇有关如何执行动态SQL(查询超过4000个字符)的文章。我已经尝试了十多种建议的解决方案。共识似乎是将查询分为4000个字符的变量,然后执行以下操作:
EXEC (@SQLQuery1 + @SQLQuery2)
Run Code Online (Sandbox Code Playgroud)
这对我不起作用-查询在@ SQLQuery1的末尾被截断。
现在,我已经看到了人们如何通过使用REPLICATE一堆空格等来“强制”长查询的示例,但这是一个真正的查询-但是比这复杂得多。
我有名称为“ Company_A_ItemView”的SQL视图。
我有10家公司想要创建相同的确切视图,并使用不同的名称,例如“ Company_B_ItemView”,“ Company_C_ItemView” .. etc。
如果您提供帮助,请不要问为什么会有多个视图-只需接受我需要这样做即可,好吗?
每个公司都有自己的一组表,并且CREATE VIEW语句按名称引用了几个表。这是Brief示例,但请记住,查询的总长度约为6000个字符:
CREATE view [dbo].[Company_A_ItemView] as
select
WE.[Item No_],
WE.[Location Code],
LOC.[Bin Number],
[..more fields, etc.]
from
[Company_A_Warehouse_Entry] WE
left join
[Company_A_Location] LOC
Run Code Online (Sandbox Code Playgroud)
...你明白了
所以,我目前正在做的是:
一种。将CREATE VIEW语句的内容拉入2个声明的变量中,例如
Set @SQLQuery1 = (select text
from syscomments
where ID = 1382894081 and colid = 1)
Set @SQLQuery2 = (select
from syscomments
where ID = 1382894081 and colid = 2)
Run Code Online (Sandbox Code Playgroud)
请注意,这就是SQL存储长定义的方式-创建视图时,它将文本存储到多个syscomments记录中。在我的情况下,视图被拆分为第一个系统记录记录中的3591个字符的文本块,其余文本在第二个记录中。我不知道为什么SQL在syscomment字段中不使用所有4000个字符。一句话就打断了这个陈述。
请注意,在我所有的示例中,所有@SQLQueryxxx变量都声明为varchar(max)。我也尝试过将它们声明为nvarchar(max)和varchar(8000)以及nvarchar(8000),结果相同。
b。然后,对“ Company_A”执行“搜索并替换”,然后将其替换为“ …