我有一段动态的SQL。大约需要4分钟。如果我改用静态SQL,大约需要20秒。有没有办法在你的select语句中为多列使用一个变量?
差不多,这两个查询是:
@myVar = 1
SELECT *
FROM TABLE
WHERE someColumn = myVar
VS:
@myQuery = '
SELECT *
FROM TABLE
WHERE someColumn = myVar'
EXEC sp_executesql @myQuery,
N'@myVar INT,
@myVar
我真正的查询是非常复杂得多。纵观统计数据,动态数据的读取次数大于10x
。我想使这个查询是静态的来解决这个问题。它动态的原因在于,我的插入和选择是使用变量创建的。
我有类似:
@someVar1 = "column1, column2, column3"
@someVar2 = "column4, column5, column6"
,然后就可以
@myQuery = 'INSERT INTO '+ @someVar1 +
'SELECT ' + @someVar2 + ' FROM ....'
等
有什么办法我只能这样做:
INSERT INTO @myVar1
SELECT @myVar2
FROM
...
我不知道ho否则要修复这个查询,并且它迫切需要修复。
编辑我做了一些修改。我忘记提到动态的东西也在插入语句中。这就是我醒来后发布帖子时会发生的情况。
不,SQL Server不会让你用变量引用列,表等,你需要使用动态SQL。 –
解决这个问题的真正方法是返回SELECT中的所有列,但改变应用程序层显示的内容而不是随时生成SELECT。 – JNK
@JNK你能详细说明一下吗? – user1652427